【问题标题】:Is it possible to locate elements by CSS properties in Scrapy?是否可以通过 Scrapy 中的 CSS 属性定位元素?
【发布时间】:2014-11-19 14:13:48
【问题描述】:

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

我试过这个:

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

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

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

【问题讨论】:

    标签: python html css scrapy


    【解决方案1】:

    Response.css()TextResponse.selector.css(query) 的快捷方式

    http://doc.scrapy.org/en/latest/topics/request-response.html#scrapy.http.TextResponse.css

    【讨论】:

      【解决方案2】:

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

      为什么不呢?

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

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

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

      例外情况

      不过,有时 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 属性的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多