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

用Python实现网络爬虫

2016-08-19 22:31 573 查看

web scraping with Python

我准备尝试着边学习边翻译O’Reilly出版社出版的Web Scraping with Python

前言

对没有开发经验(技巧)的人来说,计算机程序看起来就像一种魔法。如果说程序是魔法的话,那么网络抓取就是巫术;就是说,这种魔法的应用特别地让人印象深刻–然而让人惊讶的是它的轻松灵巧。(这段翻译的不好

实际上,在我做软件工程师的这段时间里,我发现,很少有像网络抓取这样的编程实践能够使得程序员和非专业人士都充满激情。写一个简单的机器人(simple bot)去收集数据并且将数据流下载到终端或存储到数据库的能力并不是很难,无论你可能已经做过多少次,写这样的程序总是给你提供一定的刺激和可能性的感觉。(这段是意译

不幸的是,当我向其他程序员说起网络爬虫,他们对实践有许多的误解和困惑。一些人不确定网络抓取是否合法(它当然是合法的),或者对如何用它来处理现代网络(例如包含JavaScript,multimedia,and cookies的网络).还有其他一些程序员分不清APIs和网络抓取之间的区别。

这本书试图终结关于网络抓取的这些常见的问题和误解,同时为常见的网络抓取任务提供一个全面的指南。

在第一章的开始,我将定期提供了代码示例来演示概念。这些代码示例是可以在公共领域(有或没有归属)的使用。所有代码示例也可以在本书的网站上查看和下载。

什么是网络抓取

从网络上自动收集数据的历史几乎就是网络本身的历史。尽管网络抓取不是一个新的术语,在近几年它比屏幕爬取、数据挖掘、网络收集或相似变种更加常见。如今,一般一致支持使用用web scraping,所以,我整本书都会使用这样的一个术语,虽然我也将偶尔使用机器人来代指网络抓取程序。

实际上,网络抓取包含多种技巧和技术,例如数据分析和信息安全。这本书将覆盖网络抓取和爬行(part I)的基础知识。并且在Part II探究一些高级的主题。

为什么要网络抓取?

如果你只是通过使用浏览器的方法来使用网络,那么你就错过了许多的发展可能。虽然浏览器容易执行JavaScript,显示图片,和将对象安排的更加”人类可读“等等,网络爬取在收集和处理大量数据方便拥有卓越的能力。你能够通过一次查看数以千计甚至数以百万计的页面而不是通过狭窄的监控窗口一次查看一个页面的方式生成数据库。

另外,网络爬取能够做到传统搜索引擎做不到的事情。用谷歌搜索“cheapest flights to Boston”结果将会是大量的广告和流行的航班搜索网站。谷歌只知道这些网站的内容说的是什么,只是进入一个航班搜索应用程序而没有各种查询的确切的结果。然而,一个强大的网络爬虫能够通过在各种各样的网站将飞往波士顿的机票价格随时间变化绘制成图表,并且告诉你买票的最佳时间。

你可能会问:“APIs不是用于数据采集那是干嘛用的?”(如果你对APIs不熟悉,请看第四章),well,如果你能找到一个适合你目的的API,那么APIs也是极好的。他们能够提供一种方便的被很好格式化了的数据流从一个服务器到另一个服务器。对多种你想要的不同类型的数据你都能找到一个API,例如推特帖子或维基百科页面。一般来说,我更喜欢使用一个API(如果存在的话)而不是创建一个机器人去获得相同的数据。然而,这里有一些原因,为什么API可能不存在:

- 你收集数据的网站没有一个有结合力的API

- 你想要收集的数据是一个相当小的有限的集合,网络管理员并没有授权一个API

- 资源没有基础构造或技术能力去创建一个API

-

即使一个API确实存在,但由于请求量和速度的限制,数据的类型或者它提供的格式化的数据并不足以满足你的要求。

这种情况下网络爬取就有它发挥作用的地方了。也有一些例外,如果你能在你的浏览器中查看,你能通过Python脚本获取它。如果你能在脚本中获取它,你就能够将它存储到数据库中。并且如果你能将它存储到数据库,你就能够使用这些数据做几乎任何的事情。

显然,这里有许多非常使用的应用访问这些几乎不受限制的数据:市场预测,机器语言翻译,甚至医疗诊断都极大的受益于分别从新闻网站,翻译文本和健康论坛检索和分析数据的能力。

甚至在艺术领域,网络抓取打开了创造的前沿。在2006年Jonathan Harris 和 Sep Kamvar的一个项目”We Feel Fine“,抓取了使用英语的播客网站上,以”I feel“或”I am felling“开头的短语。这导致了数据可是话的流行,描述了世界每分每秒的感觉。

不管你在什么领域,几乎总有一个网络抓取能够指导业务更有效的实践,提高

生产力,甚至进入一个全新的领域。

关于本书

大概总结一下:

本书不仅仅作为网络爬取的介绍,也是对几乎所有现代网络数据爬取的综合指。本书使用Python编程语言,覆盖了许多Python的基础知识,但不应用来作为学习Python语言。

如果你是一个编程专家并且根本不知道使用Python,那么本书对你来说可能会有些挑战。然而,如果你是个有经验的程序员,你可以轻松的获取这些资料。附录A包括了安装和使用Python3.x,本书使用的就是Python3.x。如果你使用的是Python2.x,或者没有安装Python3.x,那么你可能想要去查看附录A。

如果你想要寻找更多综合的Python资源,Bill Lubanovic写的Introducing Python就非常好。。。(后面的我就不翻译了)

方便的使用本书

以下是使用本书的排版约定:

斜体(Italic):

指示新的术语,URLs,email地址,文件名,和文件扩展

固定宽度(Constant width):

用于程序表,例如变量,函数名,数据库,数据类型,环境变量,声明,关键字。

固定宽度粗体

用于显示应该被用户提供的值替换的文本,或需要根据上下文确定的值

使用示例代码

可以在http://pythonscraping.com/code/下载代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: