我正在抓取产品数据库,并且能够获取所有 HTML 并检索大多数值,因为它们具有一些独特的项目。但是我被困在一些有共同标签的领域。
例子:
<div class="label">Name:</div><div class="value">John</div>
<div class="label">Age:</div><div class="value">24</div>
关于如何获得这些标签和相关值的任何想法?
如果其中有一些可能有帮助的东西,我将使用 HTMLAgilityPack。
我正在抓取产品数据库,并且能够获取所有 HTML 并检索大多数值,因为它们具有一些独特的项目。但是我被困在一些有共同标签的领域。
例子:
<div class="label">Name:</div><div class="value">John</div>
<div class="label">Age:</div><div class="value">24</div>
关于如何获得这些标签和相关值的任何想法?
如果其中有一些可能有帮助的东西,我将使用 HTMLAgilityPack。
请使用 xpath 获取以类为标签和类为值的 div
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(yourHtml);
Dictionary<string, string> dict = new Dictionary<string, string>();
//This will get all div's with class as label & class value in dictionary
int cnt = 1;
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='label']"))
{
var val = doc.DocumentNode.SelectSingleNode("//div[@class='value'][" + cnt + "]").InnerText;
if(!dict.ContainsKey(node.InnerText))//dictionary takes unique keys only
{
dict.Add(node.InnerText, val);
cnt++;
}
}
你可以试试这个:
Int32 endingIndex;
var Name1 = GetTextBetween(yourHtml, "<div class=\"label\">", "</div><div class=\"value\">", out endingIndex);
var Value1 = GetTextBetween(yourHtml.SubString(endingIndex), "<div class=\"value\">", "</div>", out endingIndex);
var Name2 = GetTextBetween(yourHtml.SubString(endingIndex), "<div class=\"label\">", "</div><div class=\"value\">", out endingIndex);
var Value2 = GetTextBetween(yourHtml.SubString(endingIndex), "<div class=\"value\">", "</div>", out endingIndex);
public static String GetTextBetween(String allDataToParse, String startText, String endText, out Int32 indexOfEndText)
{
var indexOfStartText = allDataToParse.IndexOf(startText);
indexOfEndText = allDataToParse.IndexOf(endText);
return allDataToParse.Substring(indexOfStartText, indexOfEndText - indexOfStartText).Replace(startText, String.Empty) ;
}
尽管 XPath 听起来总是一个好主意,但是当您抓取数据时,您不能依赖 HTML 格式良好。许多网页会定期破坏其 HTML 以增加抓取难度。尽管 Mark 的代码看起来很笨拙,但在某些情况下它实际上更加健壮。
听起来很可悲,只有当提供者在很长一段时间内被证明是可靠的时,您才能依赖目标文档的一致性。理想情况下,我会使用正则表达式来搜索我特别想要的标签。这是一个很好的起点:
不幸的是,只有您知道您正在处理的文档的确切怪癖。如果您正在查看的页面是可靠的,那么一个简单的解决方案(如 Mark 提出的解决方案)可能会奏效。坦率地说,它不太可能变得脆弱和意外崩溃。
如果您使用 HatSoft 建议的 HTML 文档解析代码,您的程序可能在大多数文档上运行良好,但根据我的经验,网站会随机抛出错误,意外更改其布局,或者有时您的网络代码只会收到部分字符串。也许这没问题,但我建议您尝试这两种方法,看看哪种方法对您更可靠。