gpt4 book ai didi

python - Scrapy中是否可以通过CSS属性定位元素?

转载 作者:太空狗 更新时间:2023-10-29 13:11:03 25 4
gpt4 key购买 nike

我想知道 Scrapy 是否有方法根据 CSS 中定义的颜色来抓取数据。例如,选择具有 background-color: #ff0000 的所有元素。

我试过这个:

response.css('td::attr(background-color)').extract()

我期待一个为表格数据元素设置所有背景颜色的列表,但它返回一个空列表。

在 Scrapy 中通常可以通过 CSS 属性定位元素吗?

最佳答案

简短的回答是,这不可能单独使用 Scrapy。

为什么不?

  • :attr() 选择器允许您访问元素属性,但background-colorCSS property .

  • 现在需要了解的一件重要事情是,有多种不同的方法可以定义页面上元素的 CSS 属性,并且要实际获取元素的 CSS 属性值,您需要一个浏览器来完全渲染页面和所有定义的样式表

  • Scrapy本身不是浏览器,不是javascript引擎,它不能渲染页面

异常(exception)情况

不过,有时 CSS 属性是在元素的 style 属性中定义的。例如:

<span style="background-color: green"/>

如果是这种情况,是的,您将能够使用 style 属性值来过滤元素:

response.xpath("//span[contains(@style, 'background-color: green')]")

虽然这会非常脆弱并且可能会产生误报。

你能做什么?

  • 寻找其他东西作为定位器的基础。一般来说,严格来说,通过背景颜色定位元素并不是找到所需元素的最佳方式,除非在某些不寻常的情况下,此属性是唯一的区分因素
  • scrapy-splash元素允许您自动化一个可以呈现页面的轻量级 Splash 浏览器。在这种情况下,您需要执行一些 Lua 脚本来访问渲染页面上元素的 CSS 属性
  • selenium浏览器自动化工具可能是解决此问题最直接的工具,因为它使您可以直接控制和访问页面及其元素及其属性和属性。有这个.value_of_css_property() method获取 CSS 属性的值。

关于python - Scrapy中是否可以通过CSS属性定位元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027847/

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