我正在尝试从 <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>
>>> <li>
>>> <a>
>>> Blah
>>> </a>
>>> <li>
>>> <a>
>>> Blah2
>>> </a>
>>> </li>
>>> </li>
>>> </li>
>>> </ul>
如上面的示例所示,Bsoup 在列表项的末尾添加所有结束标记。
最佳答案
根据我的评论,BS4 handles invalid HTML differently depending on which parser you use 。 four parsers that are supported是:
- html.parser(内置)
- lxml 的 HTML 解析器
- lxml 的 XML 解析器
- html5lib(在本例中有效)
您可以使用反复试验的方法,或者专门查看您的问题以及每个解析器处理它的方式(使用上面的链接),然后选择一个按照您希望的方式运行的解析器。
关于python - 从格式错误的 HTML 中获取列表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993863/