2017-11-11 126 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