我需要分析网页并从中提取一些值。所以我创建了一个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之后,输出为:
Data :
Data : Marks Obtained:
Data : 75.67 Out of 100 Data :Data :
Data :
Data : GATE Score:
Data : 911
Data :Data :
Data :
Data : All India Rank:
Data : 34
但是解析器应该读取一个更大的文件,上面提到的代码只是这个大文件的一小部分。文件太大,无法粘贴到此处。所以我上传到了以下链接:http://www.mediafire.com/?dsgr1gdjvs59c7c 当传递较大的文件时,解析器不会读取所有条目,而在输出中留下一些空白条目。 部分输出如下:
Data : Syllabi
Data :
Data : GATE Score
Data :
Data : GATE Results
Data :
观察门下分线的空白条目,前一次输出为911。
解析器可以处理小文件,但不能处理大文件 为什么会这样?我正在使用Python2.7
如果仔细查看mediafire上的html页面,您会发现有两个文本块包含“GATE Score”
您遇到的问题可能是由于您试图解析的整个html页面中的错误造成的,这就是为什么您只能看到一个“GATE Score”出现的原因。
正如您在评论中所建议的,使用对格式错误的html更为宽容的BeautifulSoup。
我分析HTML或XML的首选解决方案是
lxml
和xpath
。关于如何使用
xpath
的一个简单而肮脏的示例:收益率:
这段代码从HTML数据中创建一个
ElementTree
。使用xpath
,它选择所有有class="trmenu1"
属性的<tr>
元素。然后为每个<tr>
选择并打印任何<td>
子级的文本。相关问题 更多 >
编程相关推荐