Mat*_*Mat 3 html python parsing beautifulsoup
我在使用BeautifulSoup解析一些狡猾的HTML时遇到了麻烦.事实证明,较新版本中使用的HTMLParser不如先前使用的SGMLParser容忍.
BeautifulSoup有某种调试模式吗?我正在试图弄清楚如何阻止它从一个令人讨厌的HTML borking我从一个crabby网站加载:
<HTML>
<HEAD>
<TITLE>Title</TITLE>
<HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
...
...
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
BeautifulSoup在<HTTP-EQUIV...>标签后放弃
In [1]: print BeautifulSoup(c).prettify()
<html>
<head>
<title>
Title
</title>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
这个问题显然是HTTP-EQUIV标签,这实在是一个很畸形的<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">标签.显然,我需要将其指定为自动关闭,但无论我指定什么,我都无法修复它:
In [2]: print BeautifulSoup(c,selfClosingTags=['http-equiv',
'http-equiv="pragma"']).prettify()
<html>
<head>
<title>
Title
</title>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
是否有一个详细的调试模式,BeautifulSoup将告诉我它在做什么,所以我可以弄清楚它在这种情况下作为标签名称处理什么?
有美丽的汤3.1.0的问题?建议使用html5lib的解析器作为解决方法之一.
#!/usr/bin/env python
from html5lib import HTMLParser, treebuilders
parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
c = """<HTML>
<HEAD>
<TITLE>Title</TITLE>
<HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
...
...
</BODY>
</HTML>"""
soup = parser.parse(c)
print soup.prettify()
Run Code Online (Sandbox Code Playgroud)
输出:
<html>
<head>
<title>
Title
</title>
</head>
<body>
<http-equiv="pragma" content="NO-CACHE">
...
...
</http-equiv="pragma">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出显示html5lib在这种情况下没有解决问题.
| 归档时间: |
|
| 查看次数: |
2358 次 |
| 最近记录: |