gpt4 book ai didi

python - XPath 不适用于屏幕抓取

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:23 25 4
gpt4 key购买 nike

我正在使用 Scrapy 进行屏幕抓取项目,但遇到了 XPath 问题。

我正在尝试从下图中获取 94,218,但我使用的 XPath 和 CSS 无法正常工作。

enter image description here来自此页面:https://fancy.com/things/280558613/I%27m-Fine-T-Shirt

我用 Scrapy 尝试了多个 XPaths 和 CSS,但一切都返回空白。

这里有一些例子:

response.xpath('/html/body/div[1]/div[1]/div[1]/aside/div[1]/div/div/a[2]/text()').extract()

response.xpath('//*[@id="sidebar"]/div[1]/div/div/a[2]/text()').extract()

response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "fancyd_list", " " ))])'.extract()

response.xpath(".//*[@id='sidebar']/div[1]/div/div/a[2]/text()")

我已经尝试过 Firebug、Firepath、Chrome Dev Tools 和不同的插件,但 XPath 或 CSS 似乎都不起作用。有人可以提供帮助吗?

实际页面上的代码是:

<a href="#" class="fancyd_list "/>
6
</a>

一些 XPath 有效,但它们不包含文本,所以它看起来像这样:<a href="#" class="fancyd_list "/></a>

我也试过使用 BeautifulSoup,但它有同样的问题:

print soup.find_all('a',class_='fancyd_list')
[<a class="fancyd_list " href="#"></a>, <a class="fancyd_list " href="#"></a>]

谢谢!

最佳答案

这里的问题是提供的 URL 返回的 HTML 格式错误 <a>标记如下:

<a href="#" class="fancyd_list "/>  # Malformed HTML, <a> tag closes here
94,218
</a>

这里的第一行包含一个 /在右括号之前,按照 HTML 标准表示 <a> 的完成标签。自从 Scrapy 以来,<a>元素已完成,您无法获取标签之外的文本。

之前使用 BeautifulSoup 的建议在这里可能是个好主意,因为它可以更好地处理格式错误的 HTML 很多

对于此示例,您可以使用的另一个选项是通过类似于以下内容的方式自行修复 HTML:

new_body = re.sub(r'<a href="#" class="fancyd_list "/>', '<a href="#" class="fancyd_list ">', response.body)
response = response.replace(body=new_body)

然后您可以通过以下方式从响应中进行选择

response.xpath("//div[@class='frm']/div[@class='figure-button']/a[contains(@class, 'fancyd_list')]/text()").extract()

我使用“包含”的原因是因为类名(对我而言)在其名称末尾出现一个空格,因此 Scrapy 对 "a[@class='fancyd_list']" 的检查会失败,因为 "fancyd_list" != "fancyd_list "

关于python - XPath 不适用于屏幕抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33110734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com