我的问题与在 C# 中的节点内搜索的 XmlNode.SelectSingleNode 语法非常相似
我正在尝试使用 HTML Agility Pack 来获取价格/条件/发货价格......这是我正在抓取的 URL:http ://www.amazon.com/gp/offer-listing/0470108541/ref=dp_olp_used?ie =UTF8&条件=全部
这是我的代码片段:
string results = "";
var w = new HtmlWeb();
var doc = w.Load(url);
var nodes = doc.DocumentNode.SelectNodes("//div[@class='a-row a-spacing-medium olpOffer']");
if (nodes != null)
{
foreach (HtmlNode item in nodes)
{
var price = item.SelectSingleNode(".//span[@class='a-size-large a-color-price olpOfferPrice a-text-bold']").InnerText;
var condition = item.SelectSingleNode(".//h3[@class='a-spacing-small olpCondition']").InnerText;
var price_shipping = item.SelectSingleNode("//span[@class='olpShippingPrice']").InnerText;
results += "price " + price + " condition " + condition + " ship " + price_shipping + "\r\n";
}
}
return results;
无论我尝试 .// 和 . 和 ./ 和 / 等...我无法得到我想要的东西(刚刚尝试学习 xpaths),目前它一遍又一遍地返回第一项,就像我之前提到的原始问题一样。我认为我缺少对选择节点如何工作和/或什么被认为是节点的基本理解。
更新
好的,我已将 URL 更改为指向另一本书,并且前两项按预期工作...当我尝试将第三项 (price_shipping) 更改为“.//”时,绝对没有信息被提取从任何东西。这一定是因为有时甚至没有运费,并且省略了跨度。我该如何处理?我试过如果 price_shipping !=null。
更新
解决了。我从 price_shipping 中删除了“.InnerText”,当它为空时会导致问题......然后我进行了空检查,然后使用 .InnerText 是安全的。