【问题标题】:Is it possible to scrape the tags under a div with xpath?是否可以使用 xpath 刮掉 div 下的标签?
【发布时间】:2016-06-08 09:32:28
【问题描述】:

考虑以下几点:

<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 执行此操作。

【问题讨论】:

  • //div[@class="name"]/@data-starred-src

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


【解决方案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

【讨论】:

  • 试过这个并且在 OuterHtml 上工作得很好。谢谢!
【解决方案2】:

这对你有用。

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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2019-10-20
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多