2016-03-19 18 views
0

Ich habe Probleme mit Schöner Suppe 4 Inhalt aus einer Reihe von HTML-Dateien zu extrahieren, die Tags in Spanne gespeichert sindGet Inhalt von Spannweite (n) mit id

mit BeautifulSoup enthalten

ich die soupstrainer verwendet habe und Finde ("dl"), um den HTML-Code auf die wiederholten Elemente mit dem "dl" -Tag zu reduzieren und dann alle Spannen zu finden.

Mein Problem ist, wie man den richtigen Wert von jeder Spanne und Speicher in einer Variablen zu extrahieren und auch die Reihenfolge der

<span class="iconYes">Public</span> 
<span class="iconNo">Private</span> 

zu handhaben, so weiß ich, dass die von ihnen angebotenen Dienstleistungen

Mein Python 3-Code

WebText=BeautifulSoup(open(fileToProcess),"html.parser",parse_only=DentistStrainer) 
datalist = WebText.find("dl") 
     for listitems in datalist: 
      spans = datalist.find_all('span') 
      for span in spans: 
       print(span) 

Beispielausgabe

<span id="Content_Result_lblDentistName">Dr First Surname</span> 
<span class="lblAddress" id="Content_Result_lblAddress"><strong>Address</strong>: Dental Centre, Street, Town</span> 
<span class="lblAddress" id="Content_Result_lblPhone"><strong>Phone</strong>: 123-1234567</span> 
<span class="lblAddress" id="Content_Result_lblFax"><strong>Fax</strong>: 123-3456789</span> 
<span class="lblAddress" id="Content_Result_lblEmail">[email protected]</span> 
<span class="lblAddress" id="Content_Result_lblWebsiteUrl">www.somewhere.tld</span> 
<span><strong>Services</strong>: </span> 
<span class="iconYes">Private</span> 
<span class="iconYes">Public</span> 
<span class="iconNo">Credit Card</span> 

ich erfolglos versucht

if span.contains("lblDentistName"): 
    DentistName = span.text() 
    print("Dentist ",DentistName)` 

Kann irgendwelche BeautifulSoup Benutzer mir helfen, mit den Werten zu extrahieren?

Antwort

2

Verwenden CSS selectors:

dentist_names = soup.select('dl span[id$="lblDentistName"]') 
for span in dentist_names: 
    print(span.text()) 

$= wählt auf Attribute, die Ende mit dem angegebenen Text.

CSS-Selektoren können auch verwendet werden, um alle class="icon.." Span-Elemente zu finden; diese sind in der gleichen Reihenfolge, wie sie in dem Baum erscheinen abgestimmt:

soup.select('dl span[class^="icon"]') 

^= entspricht den Klassenwert am Anfang (beachten Sie, dass dies möglicherweise nicht, wenn die Spanne mehr Klassen hat).