【问题标题】:BeautifulSoup, dont fix htmlBeautifulSoup,不要修复 html
【发布时间】:2020-07-25 01:16:35
【问题描述】:

给定以下html

html = """
    <html>
    <body>

    <p>
        <p>
            Hello World
        </p>
    </p>

    <body>
    </html>
"""

当我使用 lxml 将它传递给 BeautifulSoup 并美化它时,这是我得到的输出

print BeautifulSoup(html, 'lxml').prettify()
<html>
 <body>
  <p>
  </p>
  <p>
   Hello World
  </p>
 </body>
</html>

因为&lt;p&gt;标签由于其无效的HTML而不能嵌套,所以它们在解析时被关闭。 有没有办法忽略这一点并将它们视为可嵌套的?

我无法将其解析为 xml,因为我想使用我不能作为 XML 的 css 选择器

有什么方法可以配置 lxml 忽略无效的 html?

【问题讨论】:

    标签: beautifulsoup lxml


    【解决方案1】:

    您可以使用html.parser。但是在html.parser 中添加了一个新的body

    In [1]: from bs4 import BeautifulSoup
    
    In [2]: html = """<html>
       ...:     <body>
       ...:
       ...:     <p>
       ...:         <p>
       ...:             Hello World
       ...:         </p>
       ...:     </p>
       ...:
       ...:     <body>
       ...:     </html>"""
    
    In [3]: soup = BeautifulSoup(html, "html.parser")
    
    In [4]: soup.prettify()
    Out[4]: '<html>\n <body>\n  <p>\n   <p>\n    Hello World\n   </p>\n  </p>\n  <body>\n  </body>\n </body>\n</html>'
    
    In [5]: print(soup.prettify())
    <html>
     <body>
      <p>
       <p>
        Hello World
       </p>
      </p>
      <body>
      </body>
     </body>
    </html>
    

    使用html5 解析器。添加了head 标签

    n [11]: html = """<html>
        ...:     <body>
        ...:
        ...:     <p>
        ...:         <p>
        ...:             Hello World
        ...:         </p>
        ...:     </p>
        ...:
        ...:     <body>
        ...:     </html>"""
    
    In [12]: soup = BeautifulSoup(html, "html5")
    
    In [13]: print(soup.prettify())
    <html>
     <head>
     </head>
     <body>
      <p>
      </p>
      <p>
       Hello World
      </p>
      <p>
      </p>
     </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-27
      • 2019-04-27
      • 2016-07-30
      • 2019-08-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多