2017-03-01 10 views
0

Lassen Sie uns sagen, dass ich einen Tag wie dieses:Extract Anzahl von innerhalb eines Tags

<div class="user-details"><a href="https://stackoverflow.com/users/619/jon-hu">Jon Hu</a> 

Und ich möchte die 619 extrahieren, die der Benutzer-ID oder so ähnlich ist.

ich dies tun könnte, die wie folgt ergeben würde:

question.select('.user-details a')[0] 
>>> <a href="https://stackoverflow.com/users/619/jon-hu">Jon Hu</a> 

Wie gehe ich über das nur die 619 extrahieren? Es hat kein separates Tag, also dachte ich mir, ich müsste Regex benutzen, wo ich nicht besonders gut bin.

+0

Ist es nicht was kommt genau nach dem "/ users /" ** jedes mal **? –

+0

Das ist kein "Tag". Das ist eine URL. –

Antwort

1

Sie sollten zuerst den Attributwert href extrahieren, indem Sie das Element wie ein Wörterbuch behandeln. Dann können Sie einen regulären Ausdruck gelten die Benutzer-ID zu extrahieren:

a = question.select_one('.user-details a') 
href = a["href"] 

match = re.search(r"https://stackoverflow.com/users/(\d+)", href) 
if match: 
    user_id = match.group(1) 
    print(user_id) 
else: 
    print("No user ID found in '%s'." % href) 

wo (\d+) eine Erfassungsgruppe, die eine oder mehr aufeinanderfolgende Ziffern erfassen würden.

Beachten Sie auch die Verwendung von .select_one() Methode anstelle von .select() und [0].

+0

Ich habe nicht erkannt, dass "href" war auswählbar zuzuordnen. Also ist 'a' die Klasse und' href' ist ein Attribut? Warum haben Sie '.select_one' verwendet, weil es automatisch das erste Element auswählt? Schließlich können Sie die Regex erklären? Ich dachte, wir wollten etwas wie "[0-9]", aber ich kenne Regex nicht so gut. Gibt es eine andere Möglichkeit, diese Aufgabe OHNE Regex zu erledigen? – vashts85

+0

@ vashts85 'a' ist in diesem Fall eine 'Tag'-Instanz (im Grunde genommen ein Element) und' href' ist ein Attribut, das durch Behandlung des 'Tags' als Wörterbuch erreicht werden kann. – alecxe

Verwandte Themen