C#HTML Agility Pack單選節點返回null

c# html-agility-pack web-scraping winforms

我有一個使用C#,Windows窗體和HTML Agility Pack開發的Web scraper。

當網站改變代碼並打破它時,我已經完成了所有工作。我知道這經常發生在網絡刮刀上,但現在我無法弄清楚如何糾正這個問題。

此時,我的刮刀通過多個URL循環並從每個頁面中擦除數據。

我遇到的問題是它循環的網站模板將隨機顯示較新的模板,該模板沒有與我在程序中定義的相同的HTML類和ID。我想要做的是運行一個簡單的if if檢查單個節點是否為null,以及它是否為新模板運行一組單獨的代碼。

我遇到的問題是我的程序在我的if語句上拋出NullReferenceException。

這是我用來檢查它是否為null的語句:

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']").InnerText;

 if (varitem == null) MessageBox.Show("no titles");

它在定義varitem的第一行拋出異常,甚至不使用if語句。

任何建議表示讚賞!

一般承認的答案

首先你應該檢查一下

 doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']")

返回null。

如果它為null,您將從null.InnerText獲取NullReferenceException


熱門答案

試試下面

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");

SelectSingleNode可以返回null,你也可以更好地檢查InnerText是否也不為null或為空

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");



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