是否有可能用xpath刮掉div下的标签?

时间:2016-06-08 09:32:28

标签: html xpath web-scraping html-agility-pack

请考虑以下事项:

<div class="name" data-starred-src="A Full Url"
data-non-starred-src="Some Other URL" data-reorderid="SomeID"
data-fbid="SomeID" id="SomeID" style="position: absolute;
margin-top: 0px; margin-left: 0px;">

这是一个带有许多不同属性的div元素。我想要抓取的是“data-starred-src”

下的URL

是否可以在不使用整个HTML的情况下进行此操作?

尝试使用xpath和HtmlAgilityPack执行此操作。

2 个答案:

答案 0 :(得分:1)

XPath能够返回属性,但HtmlAgilityPack似乎不支持直接返回属性值。您可以尝试先选择包含目标属性的元素,然后在元素上调用GetAttributeValue()以获取实际属性值,例如:

var raw = @"<div class='name' data-starred-src='A Full Url'
data-non-starred-src='Some Other URL' data-reorderid='SomeID'
data-fbid='SomeID' id='SomeID' style='position: absolute;
margin-top: 0px; margin-left: 0px;'></div>";

var doc = new HtmlDocument();
doc.LoadHtml(raw);
var div = doc.DocumentNode.SelectSingleNode("//div[@data-starred-src]");
var url = div.GetAttributeValue("data-starred-src", "");
Console.WriteLine(url);

<强> dotnetfiddle demo

输出

A Full Url

答案 1 :(得分:1)

这对你有用。

response = """"<div class="name" data-starred-src="A Full Url"
 data-non-starred-src="Some Other URL" data-reorderid="SomeID"
 data-fbid="SomeID" id="SomeID" style="position: absolute; 
 margin-top: 0px; margin-left: 0px;">"""
response_sel = Selector(response)
url = response_sel.xpath('//div[@data-starred-src]/@@data-starred-src')