我正在从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-。*”或任何其他方式为每个响应匹配类名?
答案 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而不是子字符串作为第二个参数。