2017-02-23 64 views
2

我目前使用尝试以使用HtmlAgilityPack从HTML页面提取特定链接。我尝试使用纯C#来强制我的方式,但结果是一个真正的痛苦。这些链接都在<div>里面,所有标签都具有相同的类别。下面是我有:使用HtmlAgilityPack检索特定网址C#

HtmlWeb web = new HtmlWeb(); 
HtmlDocument html = web.Load(url); 

//this should select only the <div> tags with the class acTrigger 
foreach (HtmlNode node in html.DocumentNode.SelectNodes("//div[@class='acTrigger']")) 
{ 
    //not sure how to dig further in to get the href values from each of the <a> tags 
} 

和网站代码看起来沿着这

  <li> 
       <div class="acTrigger"> 
        <a href="/16014988/d/" onclick="return queueRefinementAnalytics('Category','Battery')"> 
         Battery         <em>&nbsp;(1)</em> 
        </a> 
       </div> 
      </li> 
      <li> 
       <div class="acTrigger"> 
        <a href="/15568540/d/" onclick="return queueRefinementAnalytics('Category','Brakes')"> 
         Brakes         <em>&nbsp;(2)</em> 
        </a> 
       </div> 
      </li> 
      <li> 
       <div class="acTrigger"> 
        <a href="/11436914/d/1979-honda-ct90-cables-lines" onclick="return queueRefinementAnalytics('Category','Cables/Lines')"> 
         Cables/Lines         <em>&nbsp;(1)</em> 
        </a> 
       </div> 
      </li> 

有很多的这个页面上的链接线,但href我需要包含这些<a>内标签嵌套在<div class="acTrigger">标签内。这很简单,如果每个<a>共享独特的类,但不幸的是只有<div>标签有类。我需要做的是抓住这些href中的每一个并将它们存储起来,以便稍后可以检索它们,转到每个页面并从每个页面检索更多信息。我只需要在正确的方向上轻轻一点就可以克服这个麻烦,那么我也应该能够完成其他页面。我以前没有使用过这个HtmlAgilityPack的经验,我发现的所有例子似乎都想从页面中提取所有的URL,而不是特定的。我只需要一个链接到一个例子或文档,任何帮助非常感谢。

回答

2

您应该可以更改您的选择以包含<a>标记://div[@class='acTrigger']/a。那样你的HtmlNode就是你的<a>标签而不是div。

要存储链接,您可以使用GetAttributeValue

foreach (HtmlNode node in html.DocumentNode.SelectNodes("//div[@class='acTrigger']/a")) 
{ 
    // Get the value of the HREF attribute. 
    string hrefValue = node.GetAttributeValue("href", string.Empty); 
    // Then store hrefValue for later. 
}