2017-11-11 185 views
1

我需要一个选择器刮欧元符号(\ u20ac)后的值。欧元符号(Scrapy-Python)后刮的价值

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

我尝试了几十个变种,我在这里找到了stackoverflow和elsewere,但我不能得到它。

边像https://regexr.com/告诉我这样的事情:

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

应该工作,但它不。

编辑:数据的,我想在这里一个例子链接刮:https://www.firmenabc.at/manfred-jungwirth-montagen_MoKY

将不胜感激帮助!

迈克尔

+0

希望我的回答帮你,如果它的ID,请注明答案是正确的:) – alexisdevarennes

+0

你能在这里提供的元素一起工作的一大块。你既没有透露链接,也没有任何足够的资源来处理它。没有实际测试就很难回答。 – SIM

+0

您的权利Shahin - 我更新了示例链接 - 也在这里:https://www.firmenabc.at/manfred-jungwirth-montagen_MoKY – Michael

回答

0

试试这个:

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

真棒!谢谢!! – Michael

0

这是您正在寻找的正则表达式。如果你想从字面上匹配\u20ac你需要一个\,下面的变种前缀是:\u20ac|\\u20ac将同时匹配€和\ u20ac:

​​

缺失也是一个\s+\s指定要匹配一个空白,\s+指定要匹配多个空格(注意有30.000,00 \ u20ac和价值之间的空白,)

注意,虽然这将只捕捉符号(捕获组由封闭括号(),即(ANYTHING之间的将被捕获

所以我相信你想要的是:

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

重复.\d*是多余的,您已经表明您希望通过以前的编写匹配它的每一个位置:\d并将其后缀为*

最后,我建议你用正则表达式使用https://www.regex101.com - 这是一个很棒的工具,它会为你节省很多头痛。

+0

我从你的答案中学到了很多 - 谢谢! - 不幸的是“\ u20ac | \\ u20ac \ s +(\ d *。*)” - 或其他变体,都不起作用。也许这跟€符号之前的虚拟空间有什么关系? (\ r \ n \ t \ t \ u20ac ...) – Michael

+0

试试这个''\ s +(\ d *。*)'' – alexisdevarennes

+0

不只是显示数字:https://www.dropbox.com/s/x70nvdur27whgyg /stack.JPG?dl=0 – Michael