Python 美化组配置自动关闭标记

Python 美化组配置自动关闭标记,python,html,parsing,beautifulsoup,Python,Html,Parsing,Beautifulsoup,让我们举例说明我的问题: from bs4 import BeautifulSoup txt = """

让我们举例说明我的问题:

from bs4 import BeautifulSoup                                                                                                                                                                                                    

txt = """                                                                                                                                                                                                                        
<html>                                                                                                                                                                                                                           
<body>                                                                                                                                                                                                                           
<ul>
    <li> 1
    <li> 2
</ul>
</body>
"""

soup = BeautifulSoup(txt)

print(soup.prettify())

“修复”由用于将HTML加载到BeautifulSoup对象树中的解析器应用

您可以交换不同的解析器;不同的解析器以不同的方式修复损坏的HTML。你必须这样做;默认情况下,只有
html.parser
选项可用

我在这里使用
html5lib
解析器,它将以浏览器的方式解释非标准HTML,或者您可以尝试
lxml
解析器:

>>> print BeautifulSoup(txt, 'html5lib').prettify()
<html>
 <head>
 </head>
 <body>
  <ul>
   <li>
    1
   </li>
   <li>
    2
   </li>
  </ul>
 </body>
</html>
>>> print BeautifulSoup(txt, 'lxml').prettify()
<html>
 <body>
  <ul>
   <li>
    1
   </li>
   <li>
    2
   </li>
  </ul>
 </body>
</html>
打印BeautifulSoup(txt,“html5lib”).prettify()
  • 1.
  • 2.
>>>打印美化组(txt,'lxml')。美化()
  • 1.
  • 2.
如您所见,这两种方法都能产生所需的输出

只有默认解析器会出现此问题:

>>> print BeautifulSoup(txt, 'html.parser').prettify()
<html>
 <body>
  <ul>
   <li>
    1
    <li>
     2
    </li>
   </li>
  </ul>
 </body>
</html>
打印BeautifulSoup(txt,'html.parser').prettify()
  • 1.
  • 2.
>>> print BeautifulSoup(txt, 'html5lib').prettify()
<html>
 <head>
 </head>
 <body>
  <ul>
   <li>
    1
   </li>
   <li>
    2
   </li>
  </ul>
 </body>
</html>
>>> print BeautifulSoup(txt, 'lxml').prettify()
<html>
 <body>
  <ul>
   <li>
    1
   </li>
   <li>
    2
   </li>
  </ul>
 </body>
</html>
>>> print BeautifulSoup(txt, 'html.parser').prettify()
<html>
 <body>
  <ul>
   <li>
    1
    <li>
     2
    </li>
   </li>
  </ul>
 </body>
</html>