我使用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语句。
任何建议都赞赏!
答案 0 :(得分:1)
尝试以下
var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");
SelectSingleNode
可以返回null,你也可以更好地检查InnerText
是否也不为null或为空
if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
MessageBox.Show("no titles");
答案 1 :(得分:1)
首先你要检查是否
doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']")
返回null。
如果为空,您将从NullReferenceException
null.InnerText