HtmlAgilityPack如何从动态附加类属性的html节点中提取文本

时间:2011-05-28 11:59:22

标签: html-agility-pack

亲爱的朋友们,我想从摘自amazon.cn的代码段中提取文本平均3.6 星

<div class="content"><ul>
<li><b>用户评分:</b>
<span class="crAvgStars" style="white-space:no-wrap;">
<span class="asinReviewsSummary" ref="dp_db_cm_cr_acr_pop_" name="B004GUSIKO">
<a>
  <span class="swSprite s_star_3_5 " title="平均3.6 星">
  <span>平均3.6 星</span>
  </span>
</a>

我的问题是span类标记值"s_star_3_5 "因客户的评级等级而异,并动态附加。所以我尝试使用doc.DocumentNode.SelectSingleNode(" //span[@class='swSprite']").InnerText//span[@class='swSprite s_star_3_5 '],但结果是错误或不是我想要的!

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

首先,我建议您将doc.DocumentNode.OuterHtml的值保存到本地.html文件,并查看您获取的代码是否为该代码。问题是,有时您开始使用HtmlAgilityPack解析网站,但第一个问题是您没有正确获取有效的HTML。也许你得到404错误,或重定向等等。

我建议这样做是因为我测试了//span[@class='swSprite s_star_3_5 ']并且工作正常。

这是以下问题中的问题:

如果这没有帮助,请发布HTML代码,我会帮助您;)

答案 1 :(得分:1)

这对我有用:

HtmlDocument doc = new HtmlDocument();
doc.Load(myHtml);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//span[starts-with(@class, 'swSprite')]");
Console.WriteLine("Text=" + node.InnerText.Trim());

和输出

平均3.6 星

注意我使用XPATH starts-with function