2017-04-07 3 views
1

Ich möchte die Tabelle aus HTML-Code mit beautifulsoup kratzen. Ein Ausschnitt des HTML ist unten gezeigt. Bei Verwendung von table.findAll('tr') bekomme ich die gesamte Tabelle und nicht nur die Zeilen. (Wahrscheinlich, weil die schließenden Tags aus dem HTML-Code fehlen?)Python - beautifulsoup - wie man mit fehlenden schließenden Tags umgehen kann

<TABLE COLS=9 BORDER=0 CELLSPACING=3 CELLPADDING=0> 
    <TR><TD><B>Artikelbezeichnung</B> 
    <TD><B>Anbieter</B> 
    <TD><B>Menge</B> 
    <TD><B>Taxe-EK</B> 
    <TD><B>Taxe-VK</B> 
    <TD><B>Empf.-VK</B> 
    <TD><B>FB</B> 
    <TD><B>PZN</B> 
    <TD><B>Nachfolge</B> 

    <TR><TD>ACTIQ 200 Mikrogramm Lutschtabl.m.integr.Appl. 
    <TD>Orifarm 
    <TD ID=R>  30 St 
    <TD ID=R> 266,67 
    <TD ID=R> 336,98 
    <TD>&nbsp; 
    <TD>&nbsp; 
    <TD>12516714 
    <TD>&nbsp; 

    </TABLE> 

Hier ist meine Python-Code zu zeigen, was mit denen ich zu kämpfen:

 soup = BeautifulSoup(data, "html.parser") 
    table = soup.findAll("table")[0] 
    rows = table.find_all('tr') 
    for tr in rows: 
     print(tr.text) 

Antwort

2

Wie erwähnt ihre documentationhtml5lib analysiert das Dokument wie der Webbrowser (wie lxml in diesem Fall). Es wird versuchen, Ihren Dokumentbaum durch Hinzufügen/Schließen von Tags bei Bedarf zu beheben.

In Ihrem Beispiel habe ich als Parser verwendet lxml und es ergab folgendes Ergebnis:

soup = BeautifulSoup(data, "lxml") 
table = soup.findAll("table")[0] 
rows = table.find_all('tr') 
for tr in rows: 
    print(tr.get_text(strip=True)) 

Beachten Sie, dass lxml html & Body-Tags hinzugefügt, weil sie in der Quelle nicht vorhanden waren (es wird versuchen Sie, ein wohlgeformtes Dokument zu erstellen, wie es zuvor hieß).

+0

Großartig, vielen Dank !!! Es ist perfekt! – Christian

Verwandte Themen