2017-07-28 15 views
0

Ich möchte Web-Scraping lernen. Deshalb fing ich an zu üben. Ich versuche, Daten-Ad-ID von HTML mit XPath zu bekommen.Erhalten Attribut des Elements in XPath

HTML Struktur wie folgt aus:

<body id="z1234"> 
    <div class="viewport"> 
     <div class="g-row"> 
      <div class="g-col-9"> 
       <div class="cBox cBox--content cBox--resultList"> 
        <div class="cBox-body cBox-body--resultitem dealerAd rbt-reg rbt-no-top"><a class="link--muted no--text--decoration result-item" href="url" data-ad-id="248059713"></a> 
       </div> 
      </div> 
     </div> 
    </div> 
</body> 

XPath für <a class="link--muted no--text--decoration result item" > ist //*[@id="z1234"]/div[3]/div[4]/div[2]/div[1]/div[11]/a. Wenn ich ein anderes Auto wähle, ändert sich nur das letzte div.

Nach diesem schreibe ich C# Code:

var url = "https://suchen.mobile.de/fahrzeuge/search.html?damageUnrepaired=NO_DAMAGE_UNREPAIRED&isSearchRequest=true&maxPowerAsArray=KW&maxPrice=10000&minPowerAsArray=KW&minPrice=10000&scopeId=C"; 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      StreamReader sr = new StreamReader(response.GetResponseStream()); 
      string sourceCode = sr.ReadToEnd(); 

      HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
      document.LoadHtml(sourceCode); 




      var rows = document.DocumentNode.SelectNodes("//*[@id='z1234']/div[3]/div[4]/div[2]/div[1]/div[11]"); 


      foreach (var row in rows) 
      { 
       var id = row.SelectSingleNode("a[@data-ad-id]").InnerText; 
       Console.WriteLine("id:" + id); 
      } 
     } 

Ich kann nichts von diesem Knoten erhalten. Es ist null. Wie kann ich eine Daten-Ad-ID erhalten?

EDIT ich meinen C# -Code ändern:

var rows = document.DocumentNode.SelectNodes("//a[@data-ad-id]")[0]; 
var id = rows.Attributes["data-ad-id"].Value; 

Jetzt kann ich data-ad-id.

Antwort

1

Gemäß dem Code der Website, konnte ich spüren, dass Sie keinen Innertext für den „A haben " Etikett. Es enthält nur DIV- und IMG-Tags.

Sie müssen Daten-ad-ID mit

//a[@data-ad-id]/@data-ad-id 
+0

Dank für die schnelle Antwort holen! Ich habe das versucht, aber ich bekomme 'Auto-Name' anstelle von' Daten-Ad-ID'. @Ganesh Pandhere – heyaa

+0

Ich bin mir nicht sicher, wie der C# -Code geschrieben wird. Aber ich habe den Code gegeben, um den Wert des Attributs zu holen, was wir normalerweise auf die Weise tun, die ich erwähnte. –

+0

Ich hoffe, es hat für Sie funktioniert @ heyaa Sonst habe ich versucht, etwas im Zusammenhang mit SelectSingleNode als Referenz zu finden https://StackOverflow.com/Questions/3004587/How-to-get-Attribute-value-using-selectsinglenode –

Verwandte Themen