做Python爬虫已经有一小段时间了,从去年12月的两天公司培训与项目安排到毕业设计的实现,再到转正后的项目,到现在我有过几次python爬虫抓取经历,对python与爬虫有了一个初步的了解,特此拿出来与大家分享。
讲真,刚刚接触Python时候第一直觉觉得它是一个要多不靠谱有多不靠谱,要多业余有多业余的语言。变量的定义完全不需要指定类型,不同类型的变量说覆盖就覆盖,print功能不需要括号,但是在字符缩进方面要求又额外严格。希望减少编码行数,但是使得到妈的可读性大幅降低。不会有可执行文件,代码完全透明,代码的安全性极低。一系列的问题让我对这门语言有极低的评价。
随着不断的学习使用,渐渐的接受了python的编码方式,python简单的语法的确带来的极大的便利。我们们不需要去纠结变量的类型问题,了解了python的基本4大组件之后就可以开始我们自己的编程之路。特殊的语法规则大大的减少了代码的数量,严格的缩进要求使得代码的格式更加统一,交接更加便捷。针对于轻量级的任务而言,代码透明影响不大,网络上提供了大量的开源包,使得编程者的工作量骤减。
网络爬虫是我们大量获取网络数据的主要手段。针对于爬虫而言,python提供了大量的网络请求工具,我们可以通过对应的工具快速实现网络爬虫。
我使用的python版本是python2.7。尽管python3正在逐渐的取代2.7版本,但是现在业内使用最多的依旧是2.7版本。一个优秀的爬虫应当具备以下几个特点:
1.友好性:长期以来,爬虫工作者与网站开发者之间存在着无硝烟的战争,很多爬虫开发者不会去考虑网站的访问压力,短时间内向服务器发送大量的请求(我之前基本也是这么干的,直到我的IP被国内著名电商平台”某宝“网站封掉。。。。),被服务器视为恶意访问,从而导致一些列的后果。爬虫方式的更新与反爬虫机制的改进成了爬虫工作者与网站维护人员的主要工作。爬虫的抓取效率与服务器的压力之间存在着矛盾,我们在日常开发中往往只会顾虑到我们自己的需求,而忽视了网站,甚至对网站造成一些恶劣影响。爬虫开发者应当充分考虑网站服务器的压力,有好的去反问网站。
2.高性能:每秒钟能够抓取的网页数量是衡量爬虫性能的重要指标。这也是爬虫开发者需要好好考虑的一个问题。如和在保证友好性的同时尽可能的提高自身的效率,还需集体问题具体分析。
3.扩展性:
爬虫需要抓取的网页数最巨大,即使单个爬虫的性能很高,要将所有网页都下载到本地,仍然需要相当长的时间周期,为了能够尽可能缩短抓取周期,爬虫系统应该有很好的可扩展性,即很容易通过增加抓取服务器和爬虫数量来达到此目的。
除此之外,一段时间的开发也让我渐渐看到了爬虫的一些局限性。
1.访问局限性。如果我们想访问某个网站,首先我们要获取网站的连接。如果我们要抓取的数据我们无法访问到其中的内容,或者是无法从一个页面转到下一个页面(也就是下载规则不明确),做不到连续下载,爬虫对于解决该问题的意义不大。
2.针对性:爬虫是有很强的针对性的。爬虫下载网页我们可以很容易的抽象出统一的模板,对于网站的解析而言,却很难有统一的格式。解析操作是在我们下载的网页中提取我们需要的内容,网站的设计不同,提取的内容不同,相关的操作也存在着很大的差异。
3.时效性:作为一个网络爬虫开发者,我们应该随时关注我们正在爬取的网站的更新动态,一旦网页的结构发生了变化,我们的解析规则可能也需要变化,及时更新爬虫的解析规则,以确保爬虫的正常运行。
相关工具推荐:
网页下载request、urllib2
网站解析:正则表达式、xpath、bs4