我正在尝试使用scrapy、xpath 和regex来抓取这个网站。我已经检查并尝试了这个问题的答案: xpath+ regex:matches text我想创建一个<p>包含文本“11(太阳)”或“9(星期五)”等的“scrapy.selector.unified.SelectorList” ,并循环遍历列表。event = response.xpath('//p[matches(text(), "\d+\s\(\w{3}\)")]').extract()不起作用。仅供参考,以下确实有效。event = response.xpath('//p[contains(text(), "11 (sun)")]').extract()我在这里缺少什么?
2 回答

慕桂英546537
TA贡献1848条经验 获得超10个赞
如果您只关注文本,Karan Verma 的回答就足够了。
如果您追求元素本身,请继续阅读。
matches
仅在 XPath 2.0 及更高版本中可用(与其他正则表达式函数一样),在scrapy 中不可用。
Scrapy 使用 parsel 进行解析,后者又使用 lxml,后者仅支持 XPath 1.0。
但是,它支持EXSLT 命名空间中的正则表达式
由于 regex 命名空间在 scrapy 中默认启用,您可以这样做:
event = response.xpath('//p[re:match(text(), "\d+\s\(\w{3}\)")]')
添加回答
举报
0/150
提交
取消