如何在 Python 中解析一个大的畸形 HTML 页面?
How to parse a large malformed HTML page, in Python?
我正在尝试解析带有格式错误的 table 标记的大型 HTML 页面。
table 中大约有 7000-10000 行。
问题是tr
、th
、td
的none被关闭了。所以,标记是这样的:
<HTML>
<HEAD>
</HEAD>
<BODY>
<center>
<table border = 1>
<tr height=40><th colspan = 16><font size=4>Dummy content
<tr><th>A
<th>B
<th>C
<th>D
<th>E
<th>F
<th>G
<tr><td>A
<td>B
<td>C
<td>D
<td>E
<tr><td>A
<td>B
<td>C
<td>D
<td>E
.........
.........
</table>
</center>
</BODY>
</HTML>
我尝试 BeautifulSoup.prettify()
修复它,但是 BeautifulSoup 遇到了最大递归深度错误。也尝试了lxml,如下:
from lxml import html
root = html.fromstring(htmltext)
print len(root.find('.//tr'))
但是它returns长度在50左右,这里其实有7000多个tr
的。
是否有解析 HTML 并提取每行内容的好方法?
希望您正在寻找这样的东西。
import re
trs = re.findall(r'(?<=<tr>).*?(?=<tr>)', your_string, re.DOTALL)
print trs
此正则表达式将 return 两个 tr 标签之间的所有内容。如果您想在其他两个标签之间搜索,只需将第一个 tr 和第二个 tr 更改为您需要的内容即可。
我 运行 一个小测试,对我有用,如果对你有帮助,请告诉我。
我建议尝试使用 HTMLParser 模块。我只是写了一些使用它的代码,但我无法测试我的 "except HTMLParser.HTMLParseError" 块,因为我无法设计会使解析器失败的输入!
我正在尝试解析带有格式错误的 table 标记的大型 HTML 页面。
table 中大约有 7000-10000 行。
问题是tr
、th
、td
的none被关闭了。所以,标记是这样的:
<HTML>
<HEAD>
</HEAD>
<BODY>
<center>
<table border = 1>
<tr height=40><th colspan = 16><font size=4>Dummy content
<tr><th>A
<th>B
<th>C
<th>D
<th>E
<th>F
<th>G
<tr><td>A
<td>B
<td>C
<td>D
<td>E
<tr><td>A
<td>B
<td>C
<td>D
<td>E
.........
.........
</table>
</center>
</BODY>
</HTML>
我尝试 BeautifulSoup.prettify()
修复它,但是 BeautifulSoup 遇到了最大递归深度错误。也尝试了lxml,如下:
from lxml import html
root = html.fromstring(htmltext)
print len(root.find('.//tr'))
但是它returns长度在50左右,这里其实有7000多个tr
的。
是否有解析 HTML 并提取每行内容的好方法?
希望您正在寻找这样的东西。
import re
trs = re.findall(r'(?<=<tr>).*?(?=<tr>)', your_string, re.DOTALL)
print trs
此正则表达式将 return 两个 tr 标签之间的所有内容。如果您想在其他两个标签之间搜索,只需将第一个 tr 和第二个 tr 更改为您需要的内容即可。
我 运行 一个小测试,对我有用,如果对你有帮助,请告诉我。
我建议尝试使用 HTMLParser 模块。我只是写了一些使用它的代码,但我无法测试我的 "except HTMLParser.HTMLParseError" 块,因为我无法设计会使解析器失败的输入!