如何获取包含与正则表达式匹配的文本的 <p>

我正在尝试使用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()

我在这里缺少什么?


陪伴而非守候
浏览 175回答 2
2回答

慕桂英546537

如果您只关注文本,Karan Verma 的回答就足够了。如果您追求元素本身,请继续阅读。matches&nbsp;仅在 XPath 2.0 及更高版本中可用(与其他正则表达式函数一样),在scrapy 中不可用。Scrapy 使用 parsel 进行解析,后者又使用 lxml,后者仅支持 XPath 1.0。但是,它支持EXSLT 命名空间中的正则表达式由于 regex 命名空间在 scrapy 中默认启用,您可以这样做:event&nbsp;=&nbsp;response.xpath('//p[re:match(text(),&nbsp;"\d+\s\(\w{3}\)")]')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python