我想使用beautifulsoup从html代码中抓取表格。 html的片段如下所示。使用时,table.findAll(‘tr’)我会得到整个 表,而不仅仅是行。(可能是因为 html代码中缺少了结束标记?)
<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> <TD> <TD>12516714 <TD> </TABLE>
Here is my python code to show what I am struggling with:
soup = BeautifulSoup(data, "html.parser") table = soup.findAll("table")[0] rows = table.find_all('tr') for tr in rows: print(tr.text)
如他们的 文档 所述,该文档的html5lib解析方式与Web浏览器一样( lxml在这种情况下,就像这样)。 在需要时,它将尝试通过添加/关闭标签来修复文档树。
在您的示例中,我使用lxml作为解析器,它给出了以下结果:
soup = BeautifulSoup(data, "lxml") table = soup.findAll("table")[0] rows = table.find_all('tr') for tr in rows: print(tr.get_text(strip=True))
请注意,lxml添加了html&body标签,因为它们不存在于 源代码中(它将尝试按照先前的状态创建格式正确的文档)。
lxml