【问题标题】:Scrapy grab div with multiple classes?具有多个类的 Scrapy 抓取 div?
【发布时间】:2015-03-24 07:02:35
【问题描述】:

我正在尝试使用类获取 div:“产品”。问题是,一些具有“产品”类的 div 也具有“产品小”类。所以当我使用xpath('//div[@class='product']') 时,它只捕获一个类而不是多个类的 div。我怎么能用scrapy做到这一点?

例子:

  • 捕获:<div class='product'>
  • 未捕获:<div class='product product-small'>

【问题讨论】:

    标签: python html xpath web-scraping scrapy


    【解决方案1】:

    您应该考虑对这部分查询使用 CSS 选择器。

    http://doc.scrapy.org/en/latest/topics/selectors.html#when-querying-by-class-consider-using-css

    from scrapy import Selector
    sel = Selector(text='<div class="product product-small">I am a product!</div>')
    print sel.css('.product').extract()
    

    如果需要,您可以链接 CSS 和 XPath 选择器,如该页面上的示例所示。

    【讨论】:

    • 我看过这个文档,但我认为它没有用,因为div中的内容是动态加载的,这种情况我们该怎么办?
    【解决方案2】:

    这也可以通过xpath 解决。你只需要使用contains():

    //div[contains(concat(' ', normalize-space(@class), ' '), ' product ')]
    

    不过,是的,CSS selector 选项更紧凑、更易读。

    【讨论】:

    • 你的 xpath 选择器也会选择带有 not-a-product 类的元素。
    • @barraponto 是的,但当前问题的输入不包含 not-a-product 类的元素。谢谢。
    • 选择器已被编辑以执行类名的精确匹配 (c.f. doc.scrapy.org/en/1.1/topics/…)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多