第1章
Python与网络爬虫
网络爬虫(web crawler)有时候也叫网络蜘蛛(web spider),它是指这样一类程序——它们可以自动连接到互联网站点,并读取网页中的内容或者存放在网络上的各种信息,并按照某种策略对目标信息进行采集(如对某个网站的全部页面进行读取)。实际上,像Google、百度这样的搜索引擎就会通过爬虫程序来不断更新自身的网站内容和对其他网站的网络索引。某种意义上说,用户每次通过搜索引擎查询一个关键词,就是在搜索引擎提供者的爬虫程序所“爬”到的信息中进行查询。当然,搜索引擎背后所使用的技术十分复杂,其爬虫技术通常也不是一般个人所开发的小型程序所能比拟的。不过,爬虫程序本身其实并不复杂,只要懂一些编程知识,了解一些HTTP和HTML,就可以写出属于自己的爬虫程序,实现很多有意思的功能。
在众多编程语言中,本书选择Python来编写爬虫程序。Python不仅语法简洁、便于上手,而且拥有庞大的开发者社区和浩如烟海的模块库,对于普通的程序编写而言非常便利。虽然Python与C/C++等语言相比可能在性能上有所欠缺,但毕竟瑕不掩瑜,开发人员普遍认为它是目前编写网络爬虫程序的最好选择。
1.1 Python语言
Python是目前最为流行的编程语言之一,本章首先对它的历史和发展做一些简单介绍,然后再介绍Python的基本语法,对于没有Python编程经验的读者而言,可以借此对Python有一个初步的了解。
1.1.1 什么是Python
Guido van Rossum在1989年开发了Python语言,而Python的第一个公开发行版发行于1991年。因为Guido是一部电视剧《Monty Python′s FlyingCircus》的爱好者,因此将这种新的脚本语言命名为Python。
从最根本的角度来说,Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。值得注意的是,Python是开源的,源代码遵循GPL(GNUGeneral Public License)协议,这就意味着它对所有个人开发者是完全开放的,这也使得Python在开发者中迅速流行开来,来自全球各地的Python使用者为这门语言的发展贡献了很多力量。Python的哲学是优雅、明确和简单。著名的“Zen of Python”(Python之禅)这样说道:
优美胜于丑陋,
明了胜于晦涩,
简洁胜于复杂,
复杂胜于凌乱,
扁平胜于嵌套,
间隔胜于紧凑,
可读性很重要,
即便假借特例的实用性之名,也不可违背这些规则,
不要包容所有错误,除非你确定需要这样做,
当存在多种可能,不要尝试去猜测,
而是尽量找一种,最好是唯一一种明显的解决方案,
虽然这并不容易,因为你不是Python之父。
做也许好过不做,但不假思索就动手还不如不做。
如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然。
命名空间是一种绝妙的理念,我们应当多加利用。
2000年Python 2.0版本发布,Python 3.0版本则于2008年发布,这一新版本不完全兼容之前的Python源代码。目前开发者主要接触到的是Python 2.7与Python 3.5,以及更新一点的Python 3.6。Python 3在Python 2的基础上做出了不少很有价值的改进,3.5和3.6也已逐步成为Python的主流版本,本书将完全使用Python 3作为开发语言。
1.1.2 Python的应用现状
Python的应用范围十分广泛,著名的应用案例有以下几个。
·Reddit:社交分享网站,美国最热门的网站之一。
·Dropbox:文件分享服务。
·Pylons:Web应用框架。
·TurboGears:另一个Web应用快速开发框架。