【问题标题】:BeautifulSoup (bs4): How to ignore ending tag in malformed HTMLBeautifulSoup (bs4):如何忽略格式错误的 HTML 中的结束标记
【发布时间】:2016-08-01 00:43:52
【问题描述】:

我正在使用 Beautifulsoup (bs4) 来废弃 HTML 页面。它有列表<ul>,其中有<li>,其中包含一些有趣的链接(href)。

片段

<ul>
 <!-- C 1-3 --></p>
 <li>
   <a href="http://LINK1" target="_blank">Link1 description</a>
 </li>
</ul>

<ul>
 <!-- E 1-2-3-6 --></p>
 <li>
  <a href="LINK-2" target="_blank">Link-2 description</a>
 </li>
 <p><!-- E 4-5 -7-8-9-10-11 --></p>
</ul>

问题:当我使用find_all() 提取所有&lt;ul&gt; 时 - 由于格式错误的结尾&lt;/p&gt; 缺少开头&lt;p&gt;,我没有得到它。浏览器会忽略这一点并呈现正常,但 BS4 会弄乱解析。是否有人试图忽略 BS4 中的任何格式错误的标签(如果存在)?

entries = soup.find_all(lambda x: x.name == 'ul')
print(len(entries))
print(entries[0])

1
<ul>
 <!-- C 1-3 --></ul>

【问题讨论】:

    标签: python html parsing beautifulsoup


    【解决方案1】:

    我认为您应该为 HTML 尝试更宽松的解析器。例如:

    soup = BeautifulSoup(pg, "html5lib")
    

    对于 html5lib 解析器是最宽松的解析器。优点是:

    • 极其宽容
    • 以与 Web 浏览器相同的方式解析页面
    • 创建有效的 HTML5

    缺点是:

    • 很慢
    • 外部 Python 依赖项

    文档对不同解析器的优缺点进行了一些解释:https://beautiful-soup-4.readthedocs.org/en/latest/#installing-a-parser

    【讨论】:

    • FWIW,您应该引用相关文本,以防链接因任何原因发生更改。 :-)
    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多