您的位置:首页 > 理论基础 > 计算机网络

网络资源搜索爬虫(python 3.4.1实现)

2016-04-06 12:43 591 查看




最近在学习python语言,python以前没有接触,只用过perl,以前使用perl做一些大的数据集处理,当时也是比较生疏,所以一上来看了简单的官方说明文档,就马上开始coding,大约一周基本就对perl的特性比较熟悉了。所以这次我秉持着从实践中学习技术的角度,打算用python做一些小程序,顺便熟悉python语言的各个方面的特性,也因为我对网络爬虫一直都很有些兴趣,就打算着手做个小工具。

使用python做网络爬虫,网上的资源很多,我搞不清为什么很多人和机构都热衷于用python做网络爬虫,大概是因为python在这方面提供的支持库比较多也比较容易实现吧。现有的比较典型的开源爬虫架构如scrapy(python实现),其实现的功能已经比较全面了,最早的时候想了解网络爬虫的原理的时候,曾经尝试过使用scrapy定制,scrapy已经实现了比较复杂的爬虫功能,官方文档也介绍的很详细。不过为了满足我重复造轮子的好奇心,决定自己做一下,多给脑子里填一些东西

python实现网络爬虫的原理和架构网上资源很多,我就不在这里赘述,大家可以参考这些个链接了解:

1.如何入门网络爬虫?

2.你是如何开始能写python爬虫?

用python 3做网络爬虫可以使用基本的http库也可以使用urllib(注意在python2.7.*以前都是urllib2,更新后urllib2被丢弃)这种库提供对网页url的处理模块。网上充斥着大量的爬虫教程绝大多数部分描述的是使用python2 +urllib2库。使用python3做爬虫还比较少,基本原理是一样的,不过就是urlib库里一些功能的实现和老版本的库稍有不同。

简单的使用urllib抓取网页的例子如下:
123

import urllib.requestf = urllib.request.urlopen('http://www.python.org/')print(f.read().decode('urf-8'))

urllib的具体使用接口和方法参加官方文档,这里不再详述。

对于网络爬虫最很重要的一环,网页页面HTML的处理方法,python官方给出了一些标准库,不过有一个第三方库beautiful soup对抓取的网页分析更加方便,本文所述的程序采用这个库做HTML页面分析和处理。

爬虫关键的就是性能问题,影响性能的原因一个是因为爬虫程序搜索网页的逻辑本身耗时,另一个是抓取页面响应时的耗时,前一种耗时可以采用python标准库中的多线程对爬虫程序进行优化,提取主页中的关键URL采用多个爬虫线程进行爬取。针对后一种耗时,可以采用集群的方式对爬虫进行优化,不过本文研究的程序仅仅作为一种学习,不深入讨论。这里指给出优化的一小部分,python多线程的实例如下:
12345678910111213141516171819

import threading, zipfileclass AsyncZip(threading.Thread):    def __init__(self, infile, outfile):        threading.Thread.__init__(self)        self.infile = infile        self.outfile = outfile    def run(self):        f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)        f.write(self.infile)        f.close()        print('Finished background zip of:', self.infile)background = AsyncZip('mydata.txt', 'myarchive.zip')background.start()print('The main program continues to run in foreground.')background.join()    # Wait for the background task to finishprint('Main program waited until background was done.')

本文描述的爬虫主要功能是在给定的某个主页下进行广度搜索,找到子页面和父页面中包含的所有pdf和doc/docx文档并下载。之所以做这样的一个工具是因为最近在看一些论文,经常一些学术性网站会放出论文的pdf版本,不过由于pdf文件在网页中分布比较分散,手工下载起来比较麻烦,因此尝试自动爬取网页中的这些资源,然后再逐个检索。

爬虫的GUI框架使用Tkinter,Tkinter支持很多语言,比如ruby,perl,python等,是一个比较简单图形界面库,之所以不采用其他第三方GUI框架是因为这些框架很多只支持python2.7.*以前的版本,而我这里用的python3.4.1,无奈选择了最方便的方法。

下面是程序的界面:



主界面



运行时

下载文件的存储路径在设置按钮内设置,界面真心丑,不过能用…

程序的源码在我的github上,欢迎大家交流学习。

from: http://www.goldencui.org/2014/10/15/%E7%BD%91%E7%BB%9C%E8%B5%84%E6%BA%90%E6%90%9C%E7%B4%A2%E7%88%AC%E8%99%AB(python%203.4.1%E5%AE%9E%E7%8E%B0)/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: