一个网页抓取程序
时间: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的解释算法, 二是引进多线程。
相关阅读 更多 +