Python 网络数据采集
什么是网络数据采集
在互联网上进行自动数据采集这件事和互联网存在的时间差不多一样长。虽然网络数据采集并不是新术语,但是多年以来,这件事更常见的称谓是网页抓屏(screen scraping)、数据挖掘(data mining)、网络收割(Web harvesting)或其他类似的版本。今天大众好像更倾向于用“网络数据采集”,因此我在本书中使用这个术语,不过有时会把网络数据采集程序称为网络机器人(bots)。
理论上,网络数据采集是一种通过多种手段收集网络数据的方式,不光是通过与 API交互(或者直接与浏览器交互)的方式。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用 HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。
实践中,网络数据采集涉及非常广泛的编程技术和手段,比如数据分析、信息安全等。本书将在第一部分介绍关于网络数据采集和网络爬行(crawling)的基础知识,一些高级主题放在第二部分介绍。
为什么要做网络数据采集
如果你上网的唯一方式就是用浏览器,那么你其实失去了很多种可能。虽然浏览器可以更方便地执行 JavaScript,显示图片,并且可以把数据展示成更适合人类阅读的形式,但是网络爬虫收集和处理大量数据的能力更为卓越。不像狭窄的显示器窗口一次只能让你看-个网页,网络爬虫可以让你一次查看几千甚至几百万个网页。
另外,网络爬虫可以完成传统搜索引擎不能做的事情。用Google 搜索“飞往波士顿最便宜的航班”,看到的是大量的广告和主流的航班搜索网站。Google 只知道这些网站的网页会显示什么内容,却不知道在航班搜索应用中输入的各种查询的准确结果。但是,设计较好的网络爬虫可以通过采集大量的网站数据,做出飞往波士顿航班价格随时间变化的表,告诉你买机票的最佳时间。
你可能会问:“数据不是可以通过 AP 获取吗?”(如果你不熟悉 AP,请阅读第 4章。)确实,如果你能找到一个可以解决你的问题的 API,那会非常给力。它们可以非常方便地向用户提供服务器里格式完好的数据。当你使用像Twiter或维基百科的 API时,会发现一个 API同时提供了不同的数据类型。通常,如果有 API可用,API确实会比写一个网络爬虫程序来获取数据更加方便。但是,很多时候你需要的 AP并不存在,这是因为
你要收集的数据来自不同的网站,没有一个综合多个网站数据的API;你想要的数据非常小众,网站不会为你单独做一个 API;
一些网站没有基础设施或技术能力去建立 API。
即使 API已经存在,可能还会有请求内容和次数限制,API能够提供的数据类型或者数据格式可能也无法满足你的需求。
这时网络数据采集就派上用场了。你在浏览器上看到的内容,大部分都可以通过编写Python 程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。
显然,大量的应用场景都会需要这种几乎可以毫无阻碍地获取数据的手段:市场预测、机器语言翻译,甚至医疗诊断领域,通过对新闻网站、文章以及健康论坛中的数据进行采集
和分析,也可以获得很多好处。
甚至在艺术领域,网络数据采集也为艺术创作开辟了新方向。由Jonathan Haris 和 SepKamvar 在 2006 年发起的“我们感觉挺好”(We Feel Fine,http://wefeelfne.org/)项目,从大量英文博客中抓取许多以“I feel”和“I am feeling”开头的短句,最终做成了一个很受大众欢迎的数据可视图,描述了这个世界每天、每分钟的感觉。
无论你现在处于哪个领域,网络数据采集都可以让你的工作更高效,帮你提升生产力,甚至开创一个全新的领域。
本书采用简洁强大的Pyton 语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第一部分重点介绍网络数据采集的基本原理:如何用Python 从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。本书适合需要采集 Web 数据的相关软件开发人员和研究人员阅读。