2017-11-11 7 views
1

Ich brauche den a-Selektor, um den Wert nach dem Euro-Symbol (\ u20ac) abzuschaben.Scraping Wert nach Euro-Symbol (Scrapy-Python)

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

Ich habe versucht, Dutzende von Variationen, die ich hier auf Stackoverflow gefunden haben und elsewere, aber ich kann es.

Sides wie https://regexr.com/ zeigen mir, dass so etwas wie dieses:

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

sollte funktionieren, aber es tut.

EDIT: Hier ist ein Beispiel-Link von Daten, die ich kratzen möchte:

Würde schätzen Hilfe https://www.firmenabc.at/manfred-jungwirth-montagen_MoKY!

Michael

+0

Hoffnung meine Antwort Ihnen geholfen, wenn es id, die Antwort markieren Sie bitte die richtige :) – alexisdevarennes

+0

Können Sie hier ein Stück von Elementen liefern, mit zu arbeiten. Sie geben weder den Link noch ausreichende Ressourcen an, um daran zu arbeiten. Es ist schwer zu beantworten, ohne es praktisch zu testen. – SIM

+0

dein Recht Shahin - ich habe einen Beispiellink aktualisiert - auch hier: https://www.firmenabc.at/manfred-jungwirth-montagen_MoKY – Michael

Antwort

0

Try this:

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

FANTASTISCH! Danke!! – Michael

0

Hier ist die regex die Sie suchen. Wenn Sie \u20ac übereinstimmen soll buchstäblich müssen Sie es mit einem Präfix \, die folgende Variante: \u20ac|\\u20ac beide € übereinstimmen und \ u20AC:

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

Leider fehlt auch ein \s+. \s gibt Ihnen einen weißen Raum übereinstimmen soll, \s+ gibt mehrere Leerraum übereinstimmen soll (Hinweis gibt es Leerraum zwischen \ u20AC und dem Wert, 30.000,00)

Hinweis aber, dass dies nur die Symbol erfassen wird (Capture Gruppen bestehen aus geschlossenen Klammern (), dh (etwas zwischen DIES wERDEN captured)

So glaube ich, was Sie wollen, ist:

\u20ac|\\u20ac\s+(\d*.*) - Hier sind wir .\d*.* mitUmgebungdaher erfassen diesen Wert anstelle des Symbols.

Wiederholung .\d* ist überflüssig, Sie bereits angedeutet Sie jede Gelegenheit davon passen wollen, indem sie vorher schriftlich: \d und eine * suffixing.

Schließlich, ich empfehle Ihnen, herumspielen mit Regex mit https://www.regex101.com - Es ist ein großartiges Werkzeug und sparen Sie eine Menge Kopfschmerzen.

+0

Ich habe viel gelernt von Ihrer Antwort - danke dafür! - leider "\ u20ac | \ u20ac \ s + (\ d *. *)" - oder Variationen funktionieren nicht. Vielleicht hat es etwas mit den Leerzeichen vor dem € -Symbol zu tun? (\ r \ n \ t \ t \ u20ac ...) – Michael

+0

Probieren Sie diese '' \ s + (\ d *. *) '' – alexisdevarennes

+0

zeigt nicht nur Ziffern: https://www.dropbox.com/s/x70nvdur27hwhgyg /stack.JPG?dl=0 – Michael