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

Python 是否可以通过Scrapy中的CSS属性定位元素?,python,html,css,scrapy,Python,Html,Css,Scrapy,我想知道Scrapy是否有基于CSS中定义的颜色来刮取数据的方法。例如,选择背景颜色为#ff0000的所有元素 我试过这个: response.css('td::attr(background-color)').extract() 我期待一个为表数据元素设置了所有背景颜色的列表,但它返回一个空列表 通常可以通过Scrapy中的CSS属性来定位元素吗?Response.CSS()是TextResponse.selector.CSS(查询) 简短的回答是不,这不可能仅用Scrapy 为什么不?

我想知道Scrapy是否有基于CSS中定义的颜色来刮取数据的方法。例如,选择背景颜色为#ff0000的所有元素

我试过这个:

response.css('td::attr(background-color)').extract()
我期待一个为表数据元素设置了所有背景颜色的列表,但它返回一个空列表

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

Response.CSS()
TextResponse.selector.CSS(查询)


简短的回答是,这不可能仅用Scrapy

为什么不?
  • :attr()
    选择器允许您访问元素属性,但
    背景色是一种颜色

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

  • Scrapy本身不是浏览器,也不是javascript引擎,它无法呈现页面

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

<span style="background-color: green"/>
这将是非常脆弱的,可能会产生误报

你能做什么?
  • 寻找其他东西作为定位器的基础。一般来说,严格地说,通过背景色定位元素不是获得所需元素的最佳方法,除非在某些异常情况下,此属性是唯一的区别因素
  • project允许您自动使用轻量级的Splash浏览器来呈现页面。在这种情况下,需要执行一些Lua脚本来访问呈现页面上元素的CSS属性
  • 浏览器自动化工具可能是解决此问题最直接的工具,因为它使您可以直接控制和访问页面及其元素及其属性和属性。这是为了获得CSS属性的值
response.xpath("//span[contains(@style, 'background-color: green')]")