【发布时间】:2012-04-06 22:43:57
【问题描述】:
我需要解析一个网页并从中提取一些值。所以我创建了一个python解析器如下:
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_data(self, data):
print "Data :", data
f=open("result.html","r")
s=f.read()
parser = MyHTMLParser()
parser.feed(s)
程序读取 html 文件并从中打印数据。
我通过了以下 result.html,这里解析器工作正常
<tr class='trmenu1'>
<td>Marks Obtained: </td><td colspan=1>75.67 Out of 100</td>
</tr>
<tr class='trmenu1'>
<td>GATE Score: </td><td colspan=1>911</td>
</tr>
<tr class='trmenu1'>
<td>All India Rank: </td><td colspan=1>34</td>
</tr>
通过上面的html后输出为:
数据:
数据:获得的分数:
数据:100 个数据中的 75.67 个数据:数据:
数据:
数据:GATE 分数:
资料 : 911
数据:数据:
数据:
数据:全印度排名:
数据:34
但是解析器应该读取一个更大的文件,而上面提到的代码只是那个大文件的一小部分。文件太大,无法在此处粘贴。所以我把它上传到以下链接:http://www.mediafire.com/?dsgr1gdjvs59c7c 当传递较大的文件时,解析器不会读取所有条目,在输出中留下一些空白条目。 部分输出如下所示:
数据:教学大纲
数据:
数据:GATE 分数
数据:
数据:GATE 结果
数据:
观察 Gate Score 下面一行中的空白条目,在之前的输出中是 911。
解析器适用于小文件但不适用于大文件 为什么会这样?我正在使用 Python 2.7
【问题讨论】:
-
尝试使用
BeautifulSoup.py脚本。它在解析 HTML 文件方面做得很好。 -
@Coder 为什么 LibXml 比 BeautifulSoup 好?它是否处理结构不佳的 HTML?它在哪些方面做得更好?
-
我用过BeautifulSoup,它很好用,很结实。 @Coder,您可能想更新您的链接,因为链接中包含
] -
@Josh Smeaton:
lxml正在快速点亮并且更新更多。甚至BeautifulSoup4也推荐你安装lxml并会在可用时使用它。 -
1) 我用过 BeautifulSoup 和 Lxml,发现 lxml 比 BeautifulSoup 快。 2) Lxml 也可以处理损坏的 html。
标签: python html parsing html-parsing