Python 抓取解析HTML

这个程序解析百度文库的一个网页,提取其中的一个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 HTMLParser
import urllib
import 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 value




if __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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值