【问题标题】:Python - beautifulsoup - how to deal with missing closing tagsPython - beautifulsoup - 如何处理缺少的结束标签
【发布时间】:2017-09-03 03:12:56
【问题描述】:

我想使用 beautifulsoup 从 html 代码中抓取表格。 html 的 sn-p 如下所示。使用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)

【问题讨论】:

    标签: python beautifulsoup html-table


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      相关资源
      最近更新 更多