Ich bin neu zu Beautifulsoup und Python, und ich bin mir ziemlich sicher, dass dies ein tot-einfaches Problem ist, aber ich kann nicht nirgends lösen es zu bekommen.Python BeautifulSoup Schleife durch Tabelle Zeilen nach Abschnitt
Ich versuche, Zeilen einer HTML-Tabelle zu durchlaufen, basierend auf "Kopfzeilen", die die Tabelle nach Arten von Süßigkeiten gruppieren. Meine Tabelle sieht so aus:
Ich möchte die Schleife, um das Datum unter jeder Süßigkeiten Überschrift zu bekommen. So würden die Iterationen Daten wie diese:
erste Schleifeniterationslatenzzeit: candy_type: kitkat, Lage: Mall 1, Planned: 63, Aktuell: 0, Diff: 25
zweite Iteration: candy_type: kitkat, Lage: Mall 2, Geplanter: 7, Actual: 0, Diff: 6
... letzte Iteration: candy_type: Skittles, Ort: Gebäude 2, Geplant: 320, Aktuell: 236, Diff: 0
Dies ist der Tabellencode:
<TABLE BORDER="1" WIDTH="100%">
<TR>
<TH COLSPAN=4>Candy</TH>
</TR>
<TR BGCOLOR=#CEE3F6>
<TD COLSPAN=4>
<FONT FACE=Arial>
<center><b>KitKat</b></center>
</FONT>
</TD>
</TR>
<TR BGCOLOR=#336699>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>LOCATION</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>PLANNED</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>ACTUAL</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>DIFF</FONT></TD>
</TR>
<TR>
<TD>Mall 1</TD>
<TD>63</TD>
<TD>0</TD>
<TD>25</TD>
</TR>
<TR>
<TD>Mall 2</TD>
<TD>7</TD>
<TD>0</TD>
<TD>6</TD>
</TR>
<TR BGCOLOR=#CEE3F6>
<TD COLSPAN=4>
<FONT FACE=Arial>
<center><b>OH Henry</b></center>
</FONT>
</TD>
</TR>
<TR BGCOLOR=#336699>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>LOCATION</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>PLANNED</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>ACTUAL</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>DIFF</FONT></TD>
</TR>
<TR>
<TD>Warehouse 1</TD>
<TD>195</TD>
<TD>122</TD>
<TD>30</TD>
</TR>
<TR>
<TD>Warehouse 2</TD>
<TD>96</TD>
<TD>76</TD>
<TD>6</TD>
</TR>
<TR BGCOLOR=#CEE3F6>
<TD COLSPAN=4>
<FONT FACE=Arial>
<center><b>Skittles</b></center>
</FONT>
</TD>
</TR>
<TR BGCOLOR=#336699>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>LOCATION</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>PLANNED</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>ACTUAL</FONT></TD>
<TD><FONT COLOR=White FACE=Arial SIZE=-2>DIFF</FONT></TD>
</TR>
<TR>
<TD>Building 1</TD>
<TD>120</TD>
<TD>90</TD>
<TD>5</TD>
</TR>
<TR>
<TD>Building 2</TD>
<TD>320</TD>
<TD>236</TD>
<TD>0</TD>
</TR>
</TABLE>
so habe ich versucht,
from bs4 import BeautifulSoup
import urllib
readUrl = urllib.urlopen('test.html').read()
soup = BeautifulSoup(readUrl)
candytype = soup.findAll('tr',{"bgcolor" : "#CEE3F6"})
for type in candytype:
print type
Dieser druckt die drei Süßigkeiten-Typen wie folgt aus:
<tr bgcolor="#CEE3F6">
<td colspan="4">
<font face="Arial">
</font><center><b>KitKat</b></center>
</td>
</tr>
<tr bgcolor="#CEE3F6">
<td colspan="4">
<font face="Arial">
</font><center><b>OH Henry</b></center>
</td>
</tr>
<tr bgcolor="#CEE3F6">
<td colspan="4">
<font face="Arial">
</font><center><b>Skittles</b></center>
</td>
</tr>
Ich dachte, ich könnte die Süßigkeiten "Header" gruppieren (d. H. die tr Elemente, deren bgcolor
auf #CEE3F6
gesetzt ist) und dann auf dieser Basis iterieren, aber ich kann nicht herausfinden, wie man weiter in die Daten kommt.
Irgendwelche Ideen?
müssen Sie 'beautifulsoup' verwenden? Ich würde empfehlen, ['parsel'] (https://github.com/scrapy/parsel) zu verwenden – eLRuLL