具有多个类的 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