Scrapy抓住多个班级的div?

时间:2015-01-25 19:19:23

标签: python html xpath web-scraping scrapy

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

示例:

  • 抓住:<div class='product'>
  • 没有抓住:<div class='product product-small'>

2 个答案:

答案 0 :(得分:9)

这也可以通过xpath来解决。您只需使用contains()

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

虽然,是的,CSS selector选项更紧凑,更易读。

答案 1 :(得分:7)

您应该考虑为查询的这一部分使用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选择器,如该页面上的示例所示。