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 数据的相关软件开发人员和研究人员阅读。
-
ToDesk远程协助软件官方免费安装版
ToDesk最新版是一款实用且流畅的远程协助软件,通过ToDesk用户可以快速对同样安装了这款软件的用户进行远程控制,利用ToDesk软件用户只需输... 489 0 21-07-07 -
NodeJs文本相似度去重脚本
文本相似度去重,是指对一批文本进行去重,只保留相似度较高的文本。相似度的度量方法有很多种,这里以编辑距离(Edit Distance)作为衡量... 950 0 25-04-07 -
c++之按序列反转链表
int main() { ListNode *p0 = new ListNode(0); ListNode *p1 = new ListNode(1); ListNode ... 1172 0 25-04-08 -
青少年播音主持训练教程(音频)
播音主持训练教程第01讲.mp3播音主持训练教程第02讲.mp3播音主持训练教程第03讲.mp3播音主持训练教程第04讲.mp3播音主持训练教程第05讲.mp3... 963 0 24-08-20 -
Java开发实战1200例
《Java 开发实战 1200例》包括第【卷、第Ⅱ卷共计 1200 个例子,本书是第【卷,包含 603 个例子。程序开发是一项艰辛的工作,它不仅... 875 0 24-05-28 -
地区选择三联动jquery
610 0 21-06-04 -
院感科工作汇报
院感现状与问题院内感染事件频发近年来,医疗机构内感染事件屡见不鲜,给患者和医务人员带来严重危害。医务人员院感意识薄弱部分医务人员对... 778 0 25-05-20 -
splice变相跳出forEach循环
众所周知,forEach循环是无法中途跳出循环的,有点同学说不是可以通过抛出错误跳出循环吗?是的。抛出异常是广为流传的一种方法,结果是我... 801 0 25-04-07
发表我的评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~