c#中特定html标记的正则表达式

时间:2012-05-21 15:09:20

标签: c# html regex web-scraping

我正在尝试从谷歌产品页面中搜索特定的html标签,包括他们的数据。我希望得到所有< li>此有序列表中的标记并将它们放在列表中。 这是代码:

   <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>

我想获得每个标签和数据。 如果可能,请告诉我。 谢谢,天使

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我不会将正则表达式用于此特定问题。

相反,我会这样攻击它:

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

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

答案 2 :(得分:0)

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

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

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