2017-07-28 224 views
0

我想學習網絡抓取。因此,我開始練習。我正在嘗試使用XPathHTML獲取數據廣告ID。在XPath中獲取元素的屬性

HTML結構是這樣的:

<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來<a class="link--muted no--text--decoration result item" >//*[@id="z1234"]/div[3]/div[4]/div[2]/div[1]/div[11]/a。如果我選擇不同的汽車,只有最後一次更改。

根據這個我寫C#代碼:

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); 
      } 
     } 

我不能從這個節點什麼。它是空的。我如何獲得數據廣告ID?

編輯 我改變我的C#代碼:

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

現在,我可以得到data-ad-id.

回答

1

按照該網站的代碼,我能感覺到你沒有的innerText爲「A 「 標籤。它只包含DIV和IMG標籤。

您需要使用

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

感謝快速回復獲取數據-AD-ID!我嘗試了這個,但是,我得到了'car name'而不是'data-ad-id'。 @Ganesh Pandhere – heyaa

+0

我不知道如何編寫C#代碼。但是我已經給出了代碼來獲取我們通常按照我提到的方式進行的屬性值。 –

+0

我希望它爲你工作@heyaa 否則我試圖找到一些與SelectSingleNode相關的參考https://stackoverflow.com/questions/3004587/how-to-get-attribute-value-using-selectsinglenode –