3

我正在抓取产品数据库,并且能够获取所有 HTML 并检索大多数值,因为它们具有一些独特的项目。但是我被困在一些有共同标签的领域。

例子:

<div class="label">Name:</div><div class="value">John</div>
<div class="label">Age:</div><div class="value">24</div>

关于如何获得这些标签和相关值的任何想法?

如果其中有一些可能有帮助的东西,我将使用 HTMLAgilityPack。

4

3 回答 3

3

请使用 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++;
    }
} 
于 2012-07-18T20:34:23.530 回答
0

你可以试试这个:

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) ;
}
于 2012-07-18T20:57:13.187 回答
0

尽管 XPath 听起来总是一个好主意,但是当您抓取数据时,您不能依赖 HTML 格式良好。许多网页会定期破坏其 HTML 以增加抓取难度。尽管 Mark 的代码看起来很笨拙,但在某些情况下它实际上更加健壮。

听起来很可悲,只有当提供者在很长一段时间内被证明是可靠的时,您才能依赖目标文档的一致性。理想情况下,我会使用正则表达式来搜索我特别想要的标签。这是一个很好的起点:

提取标签属性的正则表达式

不幸的是,只有您知道您正在处理的文档的确切怪癖。如果您正在查看的页面是可靠的,那么一个简单的解决方案(如 Mark 提出的解决方案)可能会奏效。坦率地说,它不太可能变得脆弱和意外崩溃。

如果您使用 HatSoft 建议的 HTML 文档解析代码,您的程序可能在大多数文档上运行良好,但根据我的经验,网站会随机抛出错误,意外更改其布局,或者有时您的网络代码只会收到部分字符串。也许这没问题,但我建议您尝试这两种方法,看看哪种方法对您更可靠。

于 2012-07-18T22:33:01.553 回答