Python - beautifulsoup - 如何处理丢失的结束标签

标签 python beautifulsoup html-table

我想使用 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>

这是我的Python代码来展示我正在努力解决的问题:

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

最佳答案

正如他们的 documentation 中所述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 标记,因为它们不存在于源代码中(它将尝试创建一个格式良好的文档,如之前所述)。

关于Python - beautifulsoup - 如何处理丢失的结束标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43283131/

相关文章:

javascript - 如何使用 jquery 根据其他 td 元素更改 td 元素的背景颜色

html - 表格html底部从右到左的滚动条

html - 在带有表格标签的基本 html 代码的 outlook 中没有得到正确的输出

python - 如何在vim中添加自定义python 'self'语法高亮

python - 如何在 Python 中使用递归编织两个列表

python - 从没有指导性 HTML 结构的具有挑战性的网站中抓取信息

Python(汤): get nested data and get last item in a tag

python - 如何在 python 中逐行打印来自维基百科的抓取表?

python - Pyperclip 报错

python - Python 中正则表达式的数字问题