文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个网页抓取程序

一个网页抓取程序

时间:2011-04-14  来源:zcmky

本程序用于从网页抓取文本,也就是盗墓笔记的文本提取,写得简单,大家莫笑

''' 

 从盗墓笔记的网站中取得各集具体内容的地址,并从各集体内容网页中提取内容并写入文件中

''' #-*- encoding: gb2312 -*- import HTMLParser import urllib import sys class urlParser(HTMLParser.HTMLParser):     def __init__(self):         self.urllist=[]         HTMLParser.HTMLParser.__init__(self)                      def handle_starttag(self, tag, attrs):         # 这里重新定义了处理开始标签的函数         if tag == 'a':             # 判断标签<a>的属性             for name,value in attrs:                 if name=='href':                     self.urllist.append(value)                  class DocParser(HTMLParser.HTMLParser):     def __init__(self,filename):         self.readingtitle = 0         self.readingdoc=0         self.record=0                 self.fsock = open(filename, 'w')                        HTMLParser.HTMLParser.__init__(self)     def __del__(self):                  self.fsock.close()              def handle_starttag(self, tag, attrs):         if tag =='div':             self.record+=1         if tag == 'title':             self.readingtitle = 1         if tag == 'p':             self.readingdoc = 1             def handle_data(self,data):         if self.readingtitle:  #检查是否取得数据         #通常这是一个慢又差的方法             data=data.encode('utf-8')             self.fsock.write( data)             self.fsock.write( '\n\n')         if self.readingdoc and self.record==11:             if not ('google' in data):                 data=data.encode('utf-8')                 self.fsock.write( data)     def handle_endtag(self, tag):         if tag == 'title':             self.readingtitle = 0         if tag == 'doc':             self.readingdoc = 0              def readdata(url):               temp=url.split('/')[-1]     fname=temp.split('.')[0]+'.txt'         my = DocParser(fname)     # 传入要分析的数据,是html的。     a=urllib.urlopen(url).read()     a=a.decode('utf-8')     my.feed(a)           if __name__ == '__main__':               url=urlParser()     f=urllib.urlopen('http://www.daomubiji.com/').read()     f=f.decode('utf-8')     url.feed(f)     links=[]     for link in url.urllist:          if link.split('.')[-1]=='html':              links.append(link)          for link in links:         readdata(link)

程序比较简单,就不具体解释了,大部分内容东拼西凑,包括内部的注释也没有改。程序运行也很慢,大约要一个小时才能完成,如果要改进一是改进HTML的解释算法, 二是引进多线程。

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载