Python 抓取解析HTML

来源:互联网 发布:什么是java反射机制 编辑:程序博客网 时间:2024/06/05 22:48

这个程序解析百度文库的一个网页,提取其中的一个ID 值, 参考了网上的一些资料,才写成。

我理解这个HTMLParser类是这样工作的: 遍历每个遇到的标签。 主要是三个函数,
handle_starttag
handle_data
handle_endtag
这个三个函数,分别处理,你看到这个标签 开始,中间,结尾的时间点, 你可以做一些自己想要的处理,比如像我,我会把符合我想要的特征的 ID 存下来。 所以需要 在html源文件中,寻找你要找的数据的特点。

写这个程序的另个碰到的问题是 gbk编码的问题。
我一般都是用的utf8的编码 ,但是,百度这个页面的输出是gb2312的编码,这样Python程序就解析不了html了, 也是在网上查了资料,看到

reload(sys)
sys.setdefaultencoding(‘GBK’)
用这两句解决了编码的问题。

下面是源文件,欢迎交流学习。

#-*- encoding: gbk -*-  from HTMLParser import HTMLParserimport urllibimport sys import sys #sys.setdefaultencoding('utf8')reload(sys)sys.setdefaultencoding('GBK')class parselinks(HTMLParser):  def __init__(self):      self.data=[]      self.href=0      self.href_value=''      self.target_value=''      HTMLParser.__init__(self)  def handle_starttag(self,tag,attrs):      if tag =='a':          for name,value in attrs:              if name == 'href':                  self.href=1                  self.href_value = value              if name == 'target':                  self.target_value = value  def handle_data(self,data):      pass  def handle_endtag(self,tag):      if tag=='a' and self.target_value == '_blank':          if  self.href_value.find('view') != -1:               self.data.append(self.href_value)          self.href=0          self.href_value=''          self.target_value=''  def getresult(self):      self.data = set(self.data)      for value in self.data:          print valueif __name__=="__main__":  IParser = parselinks()  webcontent = urllib.urlopen("http://wenku.baidu.com/o/koolearn?tab=1&od=1&view=0&pay=0&cid=0&pn=1").read()  IParser.feed(webcontent)  IParser.getresult()  IParser.close()
0 0