【发布时间】:2015-10-07 04:21:57
【问题描述】:
我正在尝试使用格式错误的表格标记解析大型 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 并为每一行提取内容?
【问题讨论】:
-
我可以建议正则表达式吗?
-
输入是否真的像那样,或者您是否重新格式化了它?您可以尝试将所有
<tr>替换为</tr><tr>,将所有<th>替换为<\th><th>,等等……这肯定会减少错误的数量。 -
@omri_saadon 你能推荐一个简单的示例代码吗?
-
@3-14159265358979323846264 我只更改了 A、B、C 等标签内的内容。输入的结构完全一样。
-
@rahules 你需要提取什么数据?请给我一个具体的例子
标签: python html beautifulsoup html-parsing lxml.html