在scrapy选择器上使用正则表达式

时间:2019-05-09 04:21:45

标签: python xpath scrapy

我正在从this google page抓取数据:

要获得评论,我没有任何问题,因为所有评论都在一个名为“ review-full-text”的类中,那么我只是使用此xpath来获得评论:

review.xpath('//*[@class="review-full-text"]//text()').extract()

但是也需要获取响应,在这种情况下,类的名称不一致,例如对于第一次评论,答案在课程中:

LfKETd r-id3h0OaXd7RA

但是第二个类的名称是:

LfKETd r-iGpfKJm1EL2o

名称的第一部分固定为“ LfKETd r-”,其余部分针对每个响应进行更改。是否可以在xpath中使用正则表达式,例如:“ LfKETd r-。*”或任何其他方式为每个响应匹配类名?

2 个答案:

答案 0 :(得分:1)

这是您应该使用的xpath。

//div[starts-with(@class,'LfKETd r-')]

通过始终使用此功能,您可以检查课程的第一部分,而不必担心动态部分。

答案 1 :(得分:1)

尽管Scrapy(通过Parsel)使用的XPath 1.0本身不支持正则表达式,Parsel向XPath 1.0添加了两个扩展,其中之一是adds support for regular expressions

具体地说,它引入了re:test函数,该函数与本机contains函数的工作原理类似,但是指定了Python regular expression而不是子字符串作为第二个参数。