python - 从格式错误的 HTML 中获取列表数据

标签 python beautifulsoup

我正在尝试从 <UL> 获取数据其中列表数据格式错误。换句话说,列表中缺少结束标签 ( </LI> ):

<UL>
    <LI>Blah2
    <LI><A>Blah</A>
    <LI><A>Blah2</A>
</UL>

<UL>
    <LI><A>Blah</A>
    <LI>Blah2
    <LI><A>Blah2</A>
</UL>

<UL>
    <LI><A>Blah</A>
</UL>

<UL>
    <LI>Blah
</UL>

我可以以某种方式迭代这个吗?如示例所示,可以存在链接和不存在链接的混合。最重要的是我获取链接(如果有)和文本。

不幸的是,BeutifulSoup 尝试修复格式错误的 HTML,但造成了超出需要的损坏:

from bs4 import BeautifulSoup as bsoup
html = '<UL><LI>Blah><LI><A>Blah</A><LI><A>Blah2</A></UL>'
print bsoup(html).prettify()
>>> <ul>
>>>  <li>
>>>   Blah&gt;
>>>   <li>
>>>    <a>
>>>     Blah
>>>    </a>
>>>    <li>
>>>     <a>
>>>      Blah2
>>>     </a>
>>>    </li>
>>>   </li>
>>>  </li>
>>> </ul>

如上面的示例所示,Bsoup 在列表项的末尾添加所有结束标记。

最佳答案

根据我的评论,BS4 handles invalid HTML differently depending on which parser you usefour parsers that are supported是:

  • html.parser(内置)
  • lxml 的 HTML 解析器
  • lxml 的 XML 解析器
  • html5lib(在本例中有效)

您可以使用反复试验的方法,或者专门查看您的问题以及每个解析器处理它的方式(使用上面的链接),然后选择一个按照您希望的方式运行的解析器。

关于python - 从格式错误的 HTML 中获取列表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993863/

相关文章:

python - 处理和保护 ajax 请求中的服务器功能..python

python - 如何获得旧的 Google App Engine SDK 版本

python-3.x - XML 到 CSV Python

python - 使用 Python 网页抓取下载 PDF 不起作用

python - 使用带有Python和OpenCV的Raspberry Pi和Android IP摄像机进行对象检测

python - 如何从网站上的最后一个表中抓取数据

python - split ("\n") 和 splitlines() 都无法拆分字符串

python - 即使通过代理的连接失败,如何重试当前循环

python - 将数组中的十六进制转换为二进制

python - 如何使用 python,BeautifulSoup 获取跨度值