2017-05-21 3 views
0

Ich versuche gerade, einige Daten von einer Webseite zu kratzen. Die Daten, die ich brauche, sind innerhalb des Tags <meta> der HTML-Quelle. Das Scrapen der Daten und das Speichern in einem String mit BeautifulSoup ist kein Problem.Wie extrahiert man mehrere Werte aus demselben String mit Regex in Python?

Der String enthält 2 Zahlen, die ich extrahieren möchte. Jede dieser Zahlen (Überprüfungsergebnisse von 1 bis 100) sollte einer bestimmten Variablen für die weitere Verarbeitung zugewiesen werden.

test_str = "<meta content=\"Overall Rating: 79/100 ... Some Info ... Score: 86/100 \"/>" 

Der erste Wert ist 79/100 und die zweite ist 86/100, aber ich brauche nur 79 und 86. Bis jetzt habe ich eine Regex-Suche erstellt, um diese Werte zu finden und dann .replace("/100"), um Dinge aufzuräumen.

Aber mit meinem Code, ich bekomme nur den Wert für die erste Regex-Suche, die 79 ist. Ich habe versucht, den zweiten Wert mit m.group(1) zu bekommen, aber es funktioniert nicht.

Was fehlt mir?

test_str = "<meta content=\"Overall Rating: 79/100 ... Some Info ... Score: 86/100 \"/>" 

m = re.search("../100", test_str) 
if m: 
    found = m.group(0).replace("/100","") 
    print found 

    # output -> 79 

Danke für Ihre Hilfe.

Mit freundlichen Grüßen!

+0

' re.findall' gibt ein Array von Übereinstimmungen zurück – Ludisposed

+0

Kratzen Sie die Webseite und nehmen Sie dann die gesamte HTML-Quelle und wenden Sie Regex darauf an? Ich frage, weil Ihr Codebeispiel keinen schönen Code zeigt. – Tomalak

+1

Danke! @Tomalak Nein Ich speichere nur die Daten in einem String mit \t 'meta_description = soup.find (" meta ", {" name ":" rating-data "})'. Ich habe den Teil von BeautifulSoup einfach nicht aufgenommen, um die Dinge einfach zu halten. –

Antwort

0
test_str = "<meta content=\"Overall Rating: 79/100 ... Some Info ... Score: 86/100 \"/>"  
m = re.findall('(\d+(?=\/100))', test_str) 
# m = ['79', '86'] 

Ich änderte .. mit /d+ so können Sie für oder 2 entweder 1 Stelle suchen

Ich benutze auch eine positive Vorschau (?=...), so dass die .replace unnötig

Beispiel bei Regex101

+0

Funktioniert gut, danke! –

+0

Np froh, ich könnte helfen :) – Ludisposed

Verwandte Themen