2016-05-04 10 views
0

Ich muss Daten in einer Tabelle aus einer HTML-Seite strukturiert extrahieren. Die Datenstruktur ist alles wie folgt:Suchen Tag Wert mit bestimmten Text (Schöne Suppe)

<td class="def"> 
      <div><b>First Name:</b></div> 
     </td> 
     <td class="def">Jhon 
     </td> 

<td class="def"> 
      <div><b>Last Name:</b></div> 
     </td> 
     <td class="def">Smith 
     </td> 

Ich muss Daten separat extrahieren. Zum Beispiel

print first_name 
>> Jhon 
print last_name 
>> Smith 

Ein einfaches soup.find('td', {'class':'def'}) wird nicht funktionieren, weil es alles (Vorname :, Jhon, Nachname :, Smith) entspricht.

Irgendeine Idee, wie ich nach bestimmten Daten suchen kann? Die gleiche Frage wurde here geschrieben, aber die Lösung bei gegebenen alles nicht funktioniert ...

+0

siehe die zweite Antwort auf diesen Link – rock321987

Antwort

1

Wie sei diese Weise :

>>> tds = soup.find_all('td', {'class':'def'}) 
>>> [td.find_next_sibling('td', {'class':'def'}).text.strip() \ 
...  for td in tds if "First Name:" in s.text] 
... 
[u'Jhon'] 
>>> [td.find_next_sibling('td', {'class':'def'}).text.strip() \ 
...  for td in tds if "Last Name:" in s.text] 
... 
[u'Smith'] 
0

Versuchen Sie, diese

First Name:.*?<td class="def">([^\n]+).*?Last Name:.*?<td class="def">([^\n]+) 

Regex demo

Erläuterung:
.: alle Zeichen außer Zeilenumbruch sample
*: Null oder mehrmals sample
?: Einmal oder keine sample
(…): Gruppe Capturing sample
[^x]: Ein Zeichen, das nicht x sample
\ ist: Escapes Sonderzeichen sample
+: Ein oder mehr sample