2017-02-23 5 views
2

Ich bin derzeit Versuch HtmlAgilityPack verwenden, um bestimmte Links von einer HTML-Seite zu extrahieren. Ich habe versucht, C# zu benutzen, um mich hineinzuzwängen, aber das stellte sich als echter Schmerz heraus. Die Links sind alle innerhalb von <div> Tags, die alle die gleiche Klasse haben. Hier ist, was ich habe:Abrufen bestimmter URLs mit 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 
} 

und die Websites Code sieht entlang der Linien dieser

  <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> 

Es gibt eine Menge von Links auf dieser Seite, aber die href Ich brauche innerhalb derer <a> enthalten Tags, die innerhalb der <div class="acTrigger"> Tags verschachtelt sind. Es wäre einfach, wenn jeder <a> freigegebenen eindeutigen Klassen, aber leider nur die <div> Tags Klassen haben. Was ich tun muss, ist jeden dieser href s zu nehmen und sie zu speichern, so dass ich sie später abrufen kann, zu jeder Seite gehen und mehr Informationen von jeder Seite abrufen kann. Ich brauche nur einen Schubs in die richtige Richtung, um über diesen Buckel hinwegzukommen, dann sollte ich auch die anderen Seiten machen können. Ich habe keine Erfahrung mit diesem HtmlAgilityPack und alle Beispiele, die ich finde, scheinen alle URLs von einer Seite extrahieren zu wollen, keine spezifischen. Ich brauche nur einen Link zu einem Beispiel oder Dokumentation, jede Hilfe wird sehr geschätzt.

Antwort

2

Sie sollten in der Lage sein, Ihre Auswahl zu ändern, um das <a> Tag: //div[@class='acTrigger']/a. Auf diese Weise ist Ihr HtmlNode Ihr <a> Tag anstelle des div.

Um die Links zu speichern, können Sie GetAttributeValue verwenden.

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. 
} 
Verwandte Themen