我有一個使用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或為空
if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
MessageBox.Show("no titles");