python - 怎么获得
包含与正则表达式匹配的文本
问题描述
我正在尝试使用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()
我在这里想念什么?
解决方案
如果您只关注文本,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}\)")]')
推荐阅读
- python - 使用python查找时间序列数据(线或一维数据)的趋势
- asp.net-mvc - 模型视图保留旧数据
- flutter - Flutter 将设备令牌保存到 SharedPreferences
- android - 如何从 kotlin MutableMap 访问值
? - python - 执行后如何从内存中清除jupyter笔记本单元代码
- html - 为什么我网站上的视频没有出现在 Google 视频搜索结果中?
- c# - FluentValidation - 将参数从一个规则传递到另一个规则
- python - 网站拒绝使用 Selenium 获取请求
- php - 用于 img 标签的 Laravel 自定义路径
- azure - Microsoft Azure 应用程序在收到长 URL 时输出错误。我该如何解决?