我想学习网页抓取。因此,我开始练习。我正在尝试使用HTML
从XPath
获取data-ad-id。
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>
<a class="link--muted no--text--decoration result item" >
的XPath是//*[@id="z1234"]/div[3]/div[4]/div[2]/div[1]/div[11]/a
。如果我选择不同的车,只有最后一个div改变。
根据这个,我写了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);
}
}
我无法从这个节点获得任何东西。它是null。如何获取data-ad-id?
修改 我改变了我的C#代码:
var rows = document.DocumentNode.SelectNodes("//a[@data-ad-id]")[0];
var id = rows.Attributes["data-ad-id"].Value;
现在我可以获得data-ad-id.
答案 0 :(得分:1)
根据网站的代码,我可以感觉到你没有内容,并且#34; A&#34;标签。它只包含DIV和IMG标签。
您需要使用
获取data-ad-id//a[@data-ad-id]/@data-ad-id