在XPath中获取元素的属性
问题描述:
我想学习网络抓取。因此,我开始练习。我正在尝试使用XPath
从HTML
获取数据广告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.
答
按照该网站的代码,我能感觉到你没有的innerText为“A “ 标签。它只包含DIV和IMG标签。
您需要使用
//a[@data-ad-id]/@data-ad-id
感谢快速回复获取数据-AD-ID!我尝试了这个,但是,我得到了'car name'而不是'data-ad-id'。 @Ganesh Pandhere – heyaa
我不知道如何编写C#代码。但是我已经给出了代码来获取我们通常按照我提到的方式进行的属性值。 –
我希望它为你工作@heyaa 否则我试图找到一些与SelectSingleNode相关的参考https://*.com/questions/3004587/how-to-get-attribute-value-using-selectsinglenode –