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&hl=en">Search Help</a>
<a href=
"/quality_form?q=Pioneer+Automotive+PF-555-2000&hl=en&tbm=shop">Give us
feedback</a></p>
<div class="flc" id="fll" style="margin:19px auto 19px auto;text-align:center">
<a href="/">Google Home</a> <a href=
"/intl/en/ads">Advertising Programs</a> <a href="/services">Business
Solutions</a> <a href="/intl/en/policies/">Privacy & Terms</a> <a href=
"/intl/en/about.html">About Google</a>
</div>
</div>
</td>
我想获取所有<li class="g">
标签和每个标签中的数据。这可能吗?
【问题讨论】:
嗯。所有这些的正则表达式??? You can't parse HTML with regex 不可能,HTML无法解析,需要解释。尝试使用谷歌搜索“来自 html 的 c# 数据”(以前从未做过类似的事情,抱歉) 查看***.com/questions/56107/… 基本上:htmlagilitypack.codeplex.com 查看示例 当你说你想要所有的“标签”时,你是指 HTML 标签吗?你想去多深?它应该遵循任何特定的格式吗?我还建议删除- 边缘周围的 div - 这让你很难理解你实际上在做什么......
使用 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");
上面的代码将为您提供文档中的所有<li>
项目。要将它们添加到列表中,您只需迭代集合并将每个项目添加到列表中。
【讨论】:
以上是关于C#中特定html标签的正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章