2017-02-23 96 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. 
}