![](/img/trans.png)
[英]BeautifulSoup Not Parsing HTML Correctly inside Try/Except Loop
[英]beautifulsoup not parsing html correctly
所以我有以下代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
html = '</p></td></tr><tr><td colspan="3"> Data I want </td></tr><tr> <td colspan="3"> Data I want </td> </tr> <tr><td colspan="3"> Data I want </td> </tr></table>'
soup = BeautifulSoup(html, "lxml")
print soup.getText()
但是输出为空,但是与其他html示例一起使用也可以。 html之所以这样,是因为它是从表中提取的。
html = '<p>Content</p></td></table>'
例如,那很好。 有什么帮助吗?
编辑:我知道HTML是无效的,但第二个HTML示例也是无效的,但可以。
这是因为lxml
无法解析无效的HTML
。
使用html.parser
而不是lxml
。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
html = '</p></td></tr><tr><td colspan="3"> Data I want </td></tr><tr> <td colspan="3"> Data I want </td> </tr> <tr><td colspan="3"> Data I want </td> </tr></table>'
soup = BeautifulSoup(html, 'html.parser')
print soup.getText()
输出:
Data I want Data I want Data I want
如果一致的问题缺少开始标记,则可以使用正则表达式查找如下内容
from bs4 import BeautifulSoup
import re
html = '</p></td></tr><tr><td colspan="3"> Data I want </td></tr><tr> <td colspan="3"> Data I want </td> </tr> <tr><td colspan="3"> Data I want </td> </tr></table>'
pat = re.compile('</[a-z]*>')
L = list(re.findall(pat, html))
if L[0] != L[len(L)-1]:
html = L[len(L)-1].replace('/','') + html
soup = BeautifulSoup(html, "lxml")
print soup.getText()
输出是
Data I want Data I want Data I want
您所拥有的没有有效的HTML。 为什么不将其更改为以下内容?
html = '<table><tr><td colspan="3"> Data I want </td></tr><tr> <td colspan="3"> Data I want </td> </tr> <tr><td colspan="3"> Data I want </td> </tr></table>'
但是在您发布的示例之前可能缺少一些东西。 HTML代码来自哪里?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.