如何获取包含与regex匹配的文本的<p>

2024-06-08 22:51:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用scrapy、xpath和regex来获取这个website。 我已经检查并尝试了这个问题的答案: xpath+ regex: matches text

我想创造一个scrapy.selector.unified.SelectorList'of <p>,其中包含文本“11(sun)”或“9(fri)”等,并在列表中循环。在

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

不起作用。在

仅供参考,下面确实有用。在

^{pr2}$

我错过了什么?在


Tags: of答案text文本列表websiteselectorxpath
2条回答

您可以使用re()代替extract() 为此列表中的每个元素调用.re()方法,并以unicode字符串列表的形式返回其结果。 .re()返回unicode字符串列表。所以不能构造嵌套的.re()调用。在

event = response.xpath('//p/text()').extract("\d+\s\(\w{3}\)")

注意:re()解码HTML实体(除<;和&;)。在

有关更多信息,请参阅此处的文档:https://doc.scrapy.org/en/latest/topics/selectors.html#scrapy.selector.SelectorList.re

如果你只想看短信,那么Karan Verma的回答就足够了。
如果你在寻找元素本身,继续阅读。在

matches仅在XPath 2.0及更高版本中可用(其他regex函数也是如此),在scrapy中不可用。在

Scrapy使用parsel进行解析,后者使用lxml进行解析,lxml只支持XPath 1.0。
但是,它确实支持regular expressions in the EXSLT namespace

由于在scray中默认启用了regex命名空间,因此可以执行以下操作:

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

相关问题 更多 >