2017-02-23 10 views
2

私は現在、を試みて、HtmlAgilityPackを使用してHTMLページから特定のリンクを抽出しています。私は普通のC#を使ってやりましたが、それは本当の痛みであることが判明しました。リンクはすべて、同じクラスを持つ<div>タグ内にあります。HtmlAgilityPackで特定のURLを取得する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>タグだけがクラスを持っています。私がしなければならないのは、それらのそれぞれをつかみ、後でそれらを取り出すことができるようにそれらを保管し、各ページに行き、各ページからより多くの情報を検索することです。私はちょうど正しい方向にこのこぶを乗り越えるためにナッジが必要です、そして、私は他のページを同様に行うことができるはずです。私はこのHtmlAgilityPackの以前の経験はなく、特定の例ではなくページからすべてのURLを抽出したいと思うすべての例があります。私は例やドキュメンテーションへのリンクが必要です。どんな助けでも大歓迎です。

答えて

2

<a>タグを含むように選択を変更することができます://div[@class='acTrigger']/a。そうすれば、HtmlNodeはdivの代わりに<a>タグになります。

リンクを保存するには、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. 
} 
関連する問題