具有多个类的 Scrapy 抓取 div?

Posted

技术标签:

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

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

例子:

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

【问题讨论】:

【参考方案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/…)

以上是关于具有多个类的 Scrapy 抓取 div?的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫编程思想(153):使用Scrapy抓取数据,抓取多个Url

Python爬虫编程思想(153):使用Scrapy抓取数据,抓取多个Url

Python爬虫编程思想(153):使用Scrapy抓取数据,抓取多个Url

Scrapy实战篇之爬取360图片数据和图片

Win10 64位+Eclipse+Python3.6.1+Scrapy1.4.0爬虫框架搭建及简单实例

scrapy 按顺序抓取text内容