小编典典

Python-BeautifulSoup-如何处理缺少的结束标记

python

我想使用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>&nbsp;
  <TD>&nbsp;
  <TD>12516714
  <TD>&nbsp;

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

阅读 135

收藏
2021-01-20

共1个答案

小编典典

如他们的
文档 所述,该文档的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标签,因为它们不存在于
源代码中(它将尝试按照先前的状态创建格式正确的文档)。

2021-01-20