欢迎来到天天文库
浏览记录
ID:37171725
大小:53.50 KB
页数:5页
时间:2019-05-21
《用python编写网络爬虫》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、刚刚开了一个《计算机网络》的课,觉得很有用。正好师兄让我练习编写一个能下载网站网页的程序,正好能用上课上的知识了。为了想作一个效率不差的,而下载网页的性能瓶颈是在网络上,所有决定用Python编写代码。刚学python没几天,学习一种语言的最好方法就是写code.下面的是我用的多线程实现的网络爬虫,并用py2exe生成了一个exe,自身觉得py2exe不太好,又不会更好的,只能......这是我这些天的成果。希望有人能提出好的建议,先谢谢了!一共两个文件,一个是toolbox_insight.py,是一个工具文件另一个是test.py,是一个用到toolbox
2、_insight.py中工具的测试文件#FileName:toolbox_insight.pyfromsgmllibimportSGMLParserimportthreadingimporttimeimporturllib2importStringIOimportgzipimportstringimportos#rewriteSGMLParserforstart_aclassBasegeturls(SGMLParser):#这个Basegeturls类作用是分析下载的网页,把网页中的所有链接放在self.url中。defreset(self):self.url
3、=[]SGMLParser.reset(self)defstart_a(self,attrs):href=[vfork,vinattrsifk=='href']ifhref:self.url.extend(href)#forquicklyfindingclassNewlist(list):#这个类其实是一个添加了find方法的LIST。当num变量在LIST中,返回True,当不在LIST中,返回False并把num按二分法插入LIST中deffind(self,num):l=len(self)first=0end=l-1mid=0ifl==0:self.in
4、sert(0,num)returnFalsewhilefirstself[mid]:first=mid+1elifnumnum:self.insert(first,num)returnFalseelifself[first]end:self.insert(first
5、,num)returnFalseelse:returnTrue#下面的reptile顾名思义是一个爬虫classreptile(threading.Thread):#Name:是爬虫是名字,queue是任务队列,所有的爬虫共用同一个任务队列#从中取出一个任务项进行运行,每个任务项是一个要下载网页的URL#result:也是一个队列,将下载的网页中包含的URL放入该队列中#inittime:在本程序中没有用,只是一个为了以后扩展用的#downloadway:是下载的网页存放的路径#configfile:是配置文件,存放网页的URL和下载下后的路径#maxnum:
6、每个爬虫有个最大下载量,当下载了这么多网页后,爬虫deaddef__init__(self,Name,queue,result,Flcok,inittime=0.00001,downloadway='D:\bbs\',configfile='D:\bbs\conf.txt',maxnum=10000):threading.Thread.__init__(self,name=Name)self.queue=queueself.result=resultself.Flcok=Flcokself.inittime=inittimeself.mainway=d
7、ownloadwayself.configfile=configfileself.num=0#已下载的网页个数self.maxnum=maxnumos.makedirs(downloadway+self.getName())#系统调用:在存放网页的文件夹中创建一个以该爬虫name为名字的文件夹self.way=downloadway+self.getName()+'\'defrun(self):opener=urllib2.build_opener()#创建一个开启器whileTrue:url=self.queue.get()#从队列中取一个URLifurl
8、==None:#当取得一个None后表
此文档下载收益归作者所有