如何在Python中解析大型格式错误的HTML页面?

时间:2015-07-17 12:32:10

标签: python html beautifulsoup html-parsing lxml.html

我尝试使用格式错误的表格标记解析大型HTML页面。 表中有大约7000-10000行。 问题是trthtd都没有关闭。所以,标记是这样的:

<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并提取每行内容的好方法?

2 个答案:

答案 0 :(得分:1)

我希望你能找到这样的东西。

import re
trs = re.findall(r'(?<=<tr>).*?(?=<tr>)', your_string, re.DOTALL)
print trs

这个正则表达式将返回两个tr标签之间的所有内容。如果你想在另外两个标签之间进行搜索,只需将第一个tr和第二个tr更改为你需要的东西。

我做了一点测试,它对我有用,让我知道它是否对你有帮助。

答案 1 :(得分:1)

我建议尝试使用HTMLParser模块。我刚刚写了一些使用它的代码,我无法测试我的“除了HTMLParser.HTMLParseError”块,因为我无法设计会导致解析器失败的输入!