使用HTML Agility Pack的XPath查詢問題

c# html-agility-pack xpath

我正試圖使用HTML Agility Pack從這個網站上刮掉價格字段。

我的代碼如下;

var web = new HtmlWeb();
var doc = web.Load(String.Format(overClockersURL, componentID));
var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");

我使用Firebug的“ Copy as XPath ”功能獲得了XPath查詢。

我遇到的問題是SelectSingleNode返回null - 它似乎找不到查詢指定的元素。我有點難以理解為什麼,但我對XPath沒有多少經驗,所以會對我做錯了一些指點表示讚賞。

一般承認的答案

當發生這種情況時,你應該檢查頁面是否正確加載(你說你是通過HTTP代理?)

嘗試將doc.DocumentNode.OuterHtml的內容寫入文本文件,以便查看頁面是否正確加載。也許你得到一個錯誤頁面而不是原始頁面。


熱門答案

如果我運行此代碼:

    var web = new HtmlWeb();
    var doc = web.Load("http://www.overclockers.co.uk/showproduct.php?prodid=GX-033-HS");
    var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");
    Console.WriteLine("price=" + priceContent.InnerHtml);

它輸出:

    var web = new HtmlWeb();
    var doc = web.Load("http://www.overclockers.co.uk/showproduct.php?prodid=GX-033-HS");
    var priceContent = doc.DocumentNode.SelectSingleNode("//*[@id=\"prodprice\"]");
    Console.WriteLine("price=" + priceContent.InnerHtml);

所以它似乎有效。你也可以使用//span[@id=\"prodprice\"]"這是更好的,因為它避免了所有非SPAN標籤。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因