如何在 Python 中解析一个大的畸形 HTML 页面?

How to parse a large malformed HTML page, in Python?

我正在尝试解析带有格式错误的 table 标记的大型 HTML 页面。 table 中大约有 7000-10000 行。 问题是trthtd的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" 块,因为我无法设计会使解析器失败的输入!