Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获得<;p>;包含与正则表达式匹配的文本的_Python_Regex_Xpath_Scrapy - Fatal编程技术网

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

Python 如何获得<;p>;包含与正则表达式匹配的文本的,python,regex,xpath,scrapy,Python,Regex,Xpath,Scrapy,我正在尝试使用scrapy、xpath和正则表达式来解决这个问题。 我已经检查并尝试了这个问题的答案: 我想创建一个包含文本“11(sun)”或“9(fri)”等的的“scrapy.selector.unified.SelectorList”,并在列表中循环 event = response.xpath('//p[matches(text(), "\d+\s\(\w{3}\)")]').extract() 不起作用 仅供参考,以下内容确实有效 event = response.xpath('

我正在尝试使用scrapy、xpath和正则表达式来解决这个问题。 我已经检查并尝试了这个问题的答案:

我想创建一个包含文本“11(sun)”或“9(fri)”等的
的“scrapy.selector.unified.SelectorList”,并在列表中循环

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

仅供参考,以下内容确实有效

event = response.xpath('//p[contains(text(), "11 (sun)")]').extract()
我缺少什么?

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

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

注意:re()解码HTML实体(除了<和&)


有关更多信息,请参阅此处的文档:

如果您只关注文本,Karan Verma的回答就足够了。
如果你在寻找元素本身,继续阅读

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

Scrapy使用parsel进行解析,而parsel又使用lxml,lxml只支持XPath 1.0。
然而,它确实支持

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

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

请尝试
匹配(text(),“*[0-9]\([a-zA-Z]{3}\).*)
谢谢,但不适用于我,错误如下所示。ValueError:XPath错误:在//p[matches(text(),“*\d+\s([a-zA-Z]{3})。*”)中未注册函数。请看,这可能会有帮助。感谢您的输入,但正如stranac提到的,我需要元素“scrapy.selector.unified.SelectorList”。我修改了我的问题。谢谢你的回答。这似乎是我一直在寻找的答案,但它返回的是空列表。正则表达式似乎与我的目标文本不匹配。如果我使用“*”,它将返回所有的电位。有没有关于正则表达式抓取11(星期日)、12(星期一)、13(星期二)等的建议?提前感谢。抱歉,我的scrapy shell url错误,忘记在路径中包含$(日期+%Y%m)以获取YYYYMM字符串。效果很好。谢谢你的回答。