我尝试使用格式错误的表格标记解析大型HTML页面。
表中有大约7000-10000行。
问题是tr
,th
,td
都没有关闭。所以,标记是这样的:
<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'))
但它返回的长度约为50,实际上超过7000 tr
。
是否有一种解析HTML并提取每行内容的好方法?
答案 0 :(得分:1)
我希望你能找到这样的东西。
import re
trs = re.findall(r'(?<=<tr>).*?(?=<tr>)', your_string, re.DOTALL)
print trs
这个正则表达式将返回两个tr标签之间的所有内容。如果你想在另外两个标签之间进行搜索,只需将第一个tr和第二个tr更改为你需要的东西。
我做了一点测试,它对我有用,让我知道它是否对你有帮助。
答案 1 :(得分:1)
我建议尝试使用HTMLParser模块。我刚刚写了一些使用它的代码,我无法测试我的“除了HTMLParser.HTMLParseError”块,因为我无法设计会导致解析器失败的输入!