2017-04-07 74 views
1

我想使用beautifulsoup从html代码中刮取表格。下面显示了一个html代码片段。当使用table.findAll('tr')时,我得到整个表格,而不仅仅是行。 (大概是因为关闭标签是从HTML代码所缺少?)Python - beautifulsoup - 如何处理缺少的结束标记

<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> 

这里是我的Python代码来展示一下我挣扎:

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

回答

2

在他们的documentationhtml5lib解析文档说明就像网页浏览器一样(在这种情况下就像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 &体标签,因为它们没有出现在源(它会尝试按照以前的状态创建一个格式良好的文档)。

+0

太好了,非常感谢!这是完美的! – Christian