Python网页抓取程序
本程序用于从网页抓取文本,也就是盗墓笔记的文本提取,写得简单,大家莫笑
'''
从盗墓笔记的网站中取得各集具体内容的地址,并从各集体内容网页中提取内容并写入文件中
'''
#-*- 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的解释算法, 二是引进多线程。