【问题标题】:Regex for specific html tag in C# [duplicate]C#中特定html标签的正则表达式[重复]
【发布时间】:2012-05-28 02:34:44
【问题描述】:

我正在尝试从谷歌产品页面抓取特定的 html 标签,包括它们的数据。我想得到这个有序列表中的所有

  • 标签并将它们放在一个列表中。

    代码如下:

       <td valign="top">
            <div id="center_col">
              <div id="res">
                <div id="ires">
                  <ol>
                       <li class="g">
                      <div class="pslires">
                        <div class="psliimg">
                          <a href=
                          "https://www.google.com">
                         </a>
                        </div>
    
                        <div class="psliprice">
                          <div>
                            <b>$59.99</b> used
                          </div><cite>google auctions</cite>
                        </div>
    
                        <div class="pslimain">
                          <h3 class="r"><a href=
                          "https://www.google.com">
                          google</a></h3>
    
                          <div>
                     dummy data     </div>
                        </div>
                      </div>
                    </li>
    
                     <li class="g">
                      <div class="pslires">
                        <div class="psliimg">
                          <a href=
                          "https://www.google.com">
                         </a>
                        </div>
    
                        <div class="psliprice">
                          <div>
                            <b>$59.99</b> used
                          </div><cite>google auctions</cite>
                        </div>
    
                        <div class="pslimain">
                          <h3 class="r"><a href=
                          "https://www.google.com">
                          google</a></h3>
    
                          <div>
                     dummy data     </div>
                        </div>
                      </div>
                    </li>
    
                  <li class="g">
                      <div class="pslires">
                        <div class="psliimg">
                          <a href=
                          "https://www.google.com">
                         </a>
                        </div>
    
                        <div class="psliprice">
                          <div>
                            <b>$59.99</b> used
                          </div><cite>google auctions</cite>
                        </div>
    
                        <div class="pslimain">
                          <h3 class="r"><a href=
                          "https://www.google.com">
                          google</a></h3>
    
                          <div>
                     dummy data     </div>
                        </div>
                      </div>
                    </li>
                    <li class="g">
                      <div class="pslires">
                        <div class="psliimg">
                          <a href=
                          "https://www.google.com">
                         </a>
                        </div>
    
                        <div class="psliprice">
                          <div>
                            <b>$59.99</b> used
                          </div><cite>google auctions</cite>
                        </div>
    
                        <div class="pslimain">
                          <h3 class="r"><a href=
                          "https://www.google.com">
                          google</a></h3>
    
                          <div>
                     dummy data     </div>
                        </div>
                      </div>
                    </li>
                  </ol>
                </div>
              </div>
            </div>
    
            <div id="foot">
              <p class="flc" id="bfl" style="margin:19px 0 0;text-align:center"><a href=
              "/support/websearch/bin/answer.py?answer=134479&amp;hl=en">Search Help</a>
              <a href=
              "/quality_form?q=Pioneer+Automotive+PF-555-2000&amp;hl=en&amp;tbm=shop">Give us
              feedback</a></p>
    
              <div class="flc" id="fll" style="margin:19px auto 19px auto;text-align:center">
                <a href="/">Google&nbsp;Home</a> <a href=
                "/intl/en/ads">Advertising&nbsp;Programs</a> <a href="/services">Business
                Solutions</a> <a href="/intl/en/policies/">Privacy &amp; Terms</a> <a href=
                "/intl/en/about.html">About Google</a>
              </div>
            </div>
          </td>
    

    我想获取所有&lt;li class="g"&gt; 标签和每个标签中的数据。这可能吗?

  • 【问题讨论】:

    • 嗯。所有这些的正则表达式???
    • 不可能,HTML无法解析,需要解释。尝试使用谷歌搜索“来自 html 的 c# 数据”(以前从未做过类似的事情,抱歉)
    • 当你说你想要所有的“标签”时,你是指 HTML 标签吗?你想去多深?它应该遵循任何特定的格式吗?我还建议删除
        边缘周围的 div - 这让你很难理解你实际上在做什么......

    标签: c# html regex web-scraping


    【解决方案1】:

    使用 xml 解析器之类的东西而不是使用正则表达式可能对您的情况更有用。将其加载到 xml 文档中,然后使用 SelectNodes 之类的工具来获取您要查找的数据

    http://msdn.microsoft.com/en-us/library/4bektfx9.aspx

    【讨论】:

    • 查看我对 OP 的评论。有一个更特定于 HTML 的库,并且更能容忍源代码中的错误 - HTMLAgilityPack
    • 我会牢记这一点,以备日后的努力,谢谢!
    【解决方案2】:

    对于这个特殊问题,我不会使用正则表达式。

    相反,我会这样攻击它:

    1) 将页面保存为 html 字符串。 2)使用前面提到的 htmlagilitypack 或 htmltidy(我的偏好)转换为 XML。 3)使用xDocument按标签浏览Dom对象并保存数据。

    尝试创建一个正则表达式来从可能是流动的 HTML 页面中提取数据会让您心碎。

    【讨论】:

      【解决方案3】:

      您可以使用HtmlAgilityPack 来解析HTML,而不是使用正则表达式。

      var doc = new HtmlDocument();
      doc.LoadHtml(html);
      var listItems = doc.DocumentNode.SelectNodes("//li");
      

      上面的代码将为您提供文档中的所有&lt;li&gt; 项目。要将它们添加到列表中,您只需迭代集合并将每个项目添加到列表中。

      【讨论】:

        猜你喜欢
        • 2018-11-10
        • 1970-01-01
        • 2014-06-16
        • 2023-03-24
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 2012-01-26
        • 1970-01-01
        相关资源
        最近更新 更多