首页 > 解决方案 > 怎么获得

包含与正则表达式匹配的文本

问题描述

我正在尝试使用scrapy、xpath 和正则表达式来抓取这个网站。我已经检查并尝试了这个问题的答案: xpath+ regex: 匹配文本

我想创建一个<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()

我在这里想念什么?

标签: pythonregexxpathscrapy

解决方案


如果您只关注文本,Karan Verma 的回答就足够了。
如果您追求元素本身,请继续阅读。

matches仅在 XPath 2.0 及更高版本中可用(与其他正则表达式函数一样),在 scrapy 中不可用。

Scrapy 使用 parsel 进行解析,而后者又使用 lxml,它只支持 XPath 1.0。
但是,它确实支持EXSLT 命名空间中的正则表达式

由于在 scrapy 中默认启用了正则表达式命名空间,因此您可以这样做:

event = response.xpath('//p[re:match(text(), "\d+\s\(\w{3}\)")]')

推荐阅读