C#中特定html标签的正则表达式[重复]

Posted

技术标签:

【中文标题】C#中特定html标签的正则表达式[重复]【英文标题】:Regex for specific html tag in C# [duplicate] 【发布时间】: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; 标签和每个标签中的数据。这可能吗?

【问题讨论】:

嗯。所有这些的正则表达式??? You can't parse HTML with regex 不可能,HTML无法解析,需要解释。尝试使用谷歌搜索“来自 html 的 c# 数据”(以前从未做过类似的事情,抱歉) 查看***.com/questions/56107/… 基本上:htmlagilitypack.codeplex.com 查看示例 当你说你想要所有的“标签”时,你是指 HTML 标签吗?你想去多深?它应该遵循任何特定的格式吗?我还建议删除
    边缘周围的 div - 这让你很难理解你实际上在做什么......
【参考方案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; 项目。要将它们添加到列表中,您只需迭代集合并将每个项目添加到列表中。

【讨论】:

以上是关于C#中特定html标签的正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在 HTML 中查找特定标签 [重复]

C#正则表达式解析HTML [重复]

HTML <tr> 标签的正则表达式 [重复]

求一条c# 正则表达式,来获取HTML标签的内容

删除正则表达式中的 Html 标签 [重复]

正则表达式在 html 锚标记内不匹配 [重复]