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

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

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

作者:知行合一

本文由 知行合一博客 授权发布,版权所有归作者,转载请联系作者!

最近在学习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抓取网页的例子如下: 网络资源搜索爬虫(python 3.4.1实现)

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

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

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

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

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

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

下面是程序的界面:

网络资源搜索爬虫(python 3.4.1实现)
下载文件的存储路径在设置按钮内设置,界面真心丑,不过能用…

End.

随意打赏

提交建议
微信扫一扫,分享给好友吧。