在欧元符号后抓取值 (Scrapy-Python)

Scraping Value after Euro Symbol (Scrapy-Python)

我需要一个选择器来抓取欧元符号 (\u20ac) 后的值。

<Selector xpath='//*[@class="col-sm-4"]/text()' data=u'\r\n\t\t            \u20ac 30.000,00'>

我尝试了在 Whosebug 和 elsewere 上找到的几十种变体,但我无法得到它。

https://regexr.com/ 这样的方面向我展示了这样的事情:

response.xpath('//*[@class="col-sm-4"]/text()').re('(\u20ac).\d*.\d*.\d*')

应该可以,但不行。

编辑:这里有一个 link 我想抓取的数据示例:https://www.firmenabc.at/manfred-jungwirth-montagen_MoKY

非常感谢帮助!

迈克尔

这是您要查找的正则表达式。如果你想按字面意思匹配 \u20ac,你需要在它前面加上一个 \,下面的变体:\u20ac|\u20ac 将同时匹配 € 和 \u20ac:

(\u20ac|\u20ac)\s+.\d*.\d*.\d*

还少了一个\s+\s指定要匹配一个白色space,\s+指定要匹配多个白色space(注意\u20ac和\u20ac之间有白色space值,30.000,00)

请注意,这将仅捕获 符号(捕获组由右括号 () 组成,即(这之间的任何内容都将被捕获)

所以我相信你想要的是:

\u20ac|\u20ac\s+(\d*.*) - 在这里,我们用 () 包围 .\d*.*,因此捕获该值而不是 符号。

重复 .\d* 是多余的,您之前已经表示要匹配它的每一次出现:\d 并在其后缀 *.

最后,我建议您使用 https://www.regex101.com 玩正则表达式 - 这是一个很棒的工具,可以让您省去很多麻烦。

试试这个:

response.xpath('//*[@class="col-sm-4"]/text()').re(u'\u20ac\s*(\d+[\d\.,]+)')