2014-07-10 74 views
1

我正在执行以下代码以使用htmlagilitypack提取页面的所有链接。当我输入网址https://htmlagilitypack.codeplex.com/时,我没有收到任何错误,代码工作正常。 URL也被提取并且很好地显示。但是,如果我输入任何其他URL,如https://htmlagilitypack.codeplex.com/discussions/12447,那么我会收到以下错误“对象引用未设置为对象的实例”。我得到这一行错误htmlagilitypack提取电子邮件

OutputLabel.Text += counter + ". " + aTag.InnerHtml + " - " + 
        aTag.Attributes["href"].Value + "\t" + "<br />"; 

请帮我。这对你来说可能是一个小错误,但请不要标记为负面。

var getHtmlWeb = new HtmlWeb(); 
var document = getHtmlWeb.Load(InputTextBox.Text); 
var aTags = document.DocumentNode.SelectNodes("//a"); 
int counter = 1; 

if (aTags != null) 
{ 
    foreach (var aTag in aTags) 
    { 
     OutputLabel.Text += counter + ". " + aTag.InnerHtml + " - " + 
          aTag.Attributes["href"].Value + "\t" + "<br />"; 
     counter++; 
    } 
} 
+0

你该线路上获取对象引用错误:'VAR文档= getHtmlWeb.Load(InputTextBox.Text);' – MDiesel

+0

我在aTag.Attributes [“href”]中收到错误。值 – user3783579

回答

4

看起来有些锚没有HREF属性。例如。在给定的页面有锚:

<a name="post40566"></a> 

所以,aTag.Attributes["href"]回报null,你有,当你试图让这个属性值异常。你可以改变的XPath仅选择有此属性的锚:

document.DocumentNode.SelectNodes("//a[@href]"); 

或验证,如果属性访问其值之前存在:

if (aTag.Attributes["href"] != null) 
    // ... 

第三个选项是GetAttributeValue方法的使用,并提供一些默认值这将被显示为缺少的属性:

aTag.GetAttributeValue("href", "N/A") 
+1

非常感谢。我在网上搜索了两个小时。它工作正常。你能帮我解决其他问题吗?如果我想忽略图片的网址,我需要在代码 – user3783579

+0

@ user3783579中添加什么,实际上这是另一个问题。如果目前的问题解决了,您应该接受解决方案,如果您有其他问题,请创建新问题。这里提示你的下一个问题 - 获得'href'值并验证链接的扩展 –