Scrapy抓住多个班级的div?

use*_*351 11 html python xpath scrapy web-scraping

我试图用类来抓住div:'产品'.问题是,一些带有"产品"类的div也有"产品小"这个类.所以当我使用时xpath('//div[@class='product']'),它只捕获一个类而不是多个的div.我怎么能用scrapy做到这一点?

例:

  • 渔获: <div class='product'>
  • 不抓住: <div class='product product-small'>

ale*_*cxe 9

这也可以用xpath.你只需要使用contains():

//div[contains(concat(' ', normalize-space(@class), ' '), ' product ')]
Run Code Online (Sandbox Code Playgroud)

但是,是的,该CSS selector选项更紧凑,更易读.


spi*_*nce 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()
Run Code Online (Sandbox Code Playgroud)

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