【问题标题】:Beautifulsoup4 unclosed tag bugBeautifulsoup4 未关闭的标签错误
【发布时间】:2021-06-30 08:54:11
【问题描述】:

在解析“链接”标签时,soup 无法理解非斜杠标签。

示例...

import requests
from bs4 import BeautifulSoup

html = '<html>
        <head>
        <title>bs4bug</title>
          <link rel="1"/>
          <link rel="2">
          <link rel="3"/>
          <link rel="4"/>
          <link rel="5"/>
        </head>
        <body>
          <h1>bs4bug</h1>
          <link rel="6"/>
        </body>
        </html>'

for num, link in enumerate(BeautifulSoup(html, 'html.parser').findAll('link'), start=1):
    print(num, link)

输出:

1 <link rel="1"/>
2 <link rel="2"/>
3 <link rel="3"><link rel="4"/><link rel="5"/></link>
4 <link rel="4"/>
5 <link rel="5"/>
6 <link rel="6"/>

在我的情况下,它发生在这一行之后:

<link href="https://fonts.googleapis.com/css?family=Rubik:400,500,700,300&amp;subset=latin" rel="stylesheet" type="text/css">

bs4,将所有 html 包装在一个未封闭的标签“链接”中。

如何解决?

【问题讨论】:

    标签: parsing beautifulsoup


    【解决方案1】:

    要正确解析文档,请使用 lxmlhtml5lib 解析器:

    from bs4 import BeautifulSoup
    
    html = """<html>
            <head>
            <title>bs4bug</title>
              <link rel="1"/>
              <link rel="2">
              <link rel="3"/>
              <link rel="4"/>
              <link rel="5"/>
            </head>
            <body>
              <h1>bs4bug</h1>
              <link rel="6"/>
            </body>
            </html>"""
    
    sup = BeautifulSoup(html, "lxml")  # <-- use `lxml` or `html5lib`
    for num, link in enumerate(sup.findAll("link"), start=1):
        print(num, link)
    

    打印:

    1 <link rel="1"/>
    2 <link rel="2"/>
    3 <link rel="3"/>
    4 <link rel="4"/>
    5 <link rel="5"/>
    6 <link rel="6"/>
    

    【讨论】:

    • bs4 最受欢迎,这就是我选择它的原因。谢谢你的回答。我会再看看这个图书馆
    • @AlikSei 是的,但将'html.parser' 替换为lxmlhtml5lib。这就是 bs4 在内部用来解析 HTML 文档的内容
    • 酷,'html5lib' 解决了我的卡顿!但“lxml”与“bs4”相同。非常感谢!
    猜你喜欢
    • 2020-12-26
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多