做为程序员,相信你们对“爬虫”这个词并不陌生,身边经常会有人提这个词,在不了解它的人眼中,会以为这个技术很高端很神秘。不用着急,咱们的爬虫系列就是带你去揭开它的神秘面纱,探寻它真实的面目。程序员
!数据库
网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照必定的规则,自动地抓取万维网信息的程序或者脚本。另一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。浏览器
通俗地讲,咱们把互联网比做一张大蜘蛛网,每一个站点资源比做蜘蛛网上的一个结点,爬虫就像一只蜘蛛,按照设计好的路线和规则在这张蜘蛛网上找到目标结点,获取资源。服务器
为何咱们须要使用爬虫呢?网络
你们能够想象一下一个场景:你很是崇拜一个微博名人,对他的微博很是着迷,你想把他十年来微博上的每一句话摘抄下来,制做成名人语录。这个时候你怎么办呢?手动去 Ctrl+C 和 Ctrl+V 吗?这种方法确实没错,数据量小的时候咱们还能够这样作,可是数据成千上万的时候你还要这样作吗?ide
咱们再来想象另外一个场景:你要作一个新闻聚合网站,天天须要定时去几个新闻网站获取最新的新闻,咱们称之为 RSS 订阅。难道你会定时去各个订阅网站复制新闻吗?恐怕我的很难作到这一点吧。学习
上面两种场景,使用爬虫技术能够很轻易地解决问题。因此,咱们能够看到,爬虫技术主要能够帮助咱们作两类事情:一类是数据获取需求,主要针对特定规则下的大数据量的信息获取;另外一类是自动化需求,主要应用在相似信息聚合、搜索等方面。大数据
从爬取对象来看,爬虫能够分为通用爬虫和聚焦爬虫两类。网站
通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为搜索引擎和大型 Web 服务提供商采集数据。这类网络爬虫的爬取范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低。例如咱们常见的百度和谷歌搜索。咱们输入关键词,它们会从全网去找关键词相关的网页,而且按照必定的顺序呈现给咱们。搜索引擎
聚焦网络爬虫(Focused Crawler),是指选择性地爬取那些与预先定义好的主题相关页面的网络爬虫。和通用网络爬虫相比,聚焦爬虫只须要爬取特定的网页,爬取的广度会小不少。例如咱们须要爬取东方财富网的基金数据,咱们只须要针对东方财富网的页面制定规则爬取就行。
通俗地讲,通用爬虫就相似于一只蜘蛛,须要寻找特定的食物,可是它不知道蜘蛛网的哪一个节点有,因此它只能从一个节点开始寻找,遇到节点就看一下,若是有食物就获取食物,若是这个节点指示某某节点有食物,那它就顺着指示去寻找下个节点。而聚焦网络爬虫就是这只蜘蛛知道哪一个节点有食物,它只须要规划好路线到达那个节点就能获取到食物。
在用户浏览网页的过程当中,咱们可能会看到许多好看的图片,好比 http://image.baidu.com/ ,咱们会看到几张图片以及百度搜索框,相似下面图片这样:
baidu_pic_index
这个过程其实就是用户输入网址以后,通过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器通过解析以后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,用户即可以看到形形色色的图片了。
所以,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的即是这些内容,经过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。
URL,即统一资源定位符,也就是咱们说的网址,统一资源定位符是对能够从互联网上获得的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每一个文件都有一个惟一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL 的格式由三部分组成:
- 第一部分是协议(或称为服务方式)。
- 第二部分是存有该资源的主机IP地址(有时也包括端口号)。
- 第三部分是主机资源的具体地址,如目录和文件名等。
因为爬虫的目标是获取资源,而资源都存储在某个主机上,因此爬虫爬取数据时必需要有一个目标的 URL 才能够获取数据,所以,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。
咱们接下来的篇章主要讨论聚焦爬虫,聚焦爬虫的工做流程以下图:
spider_flow
- 首先咱们须要有一个种子 URL 队列,这个队列中的 URL 至关于咱们蜘蛛爬行的第一个结点,是咱们在大网中爬行的第一步。
- 对队列中的每个 URL 进行请求,咱们会获得响应内容,一般响应内容为HTML。若是响应内容里面有咱们的目标 URL,提取出来加入 URL 队列中。
- 解析响应内容,提取咱们须要的数据。
- 存储数据,咱们能够将数据存储到数据库、文件等。
从这个爬虫的流程来看,你们应该可以联想到学习爬虫须要学习的关键步骤。首先咱们须要像浏览器同样请求某个 URL ,来获取某个主机的资源,那么请求的方法和正确地获取内容就是咱们学习的重点。咱们获取到资源(也就是请求 URL 以后得到的响应内容)以后,咱们须要对响应的内容进行解析,从而获取到对咱们有价值的数据,这里面的解析方法就是学习的重点了。咱们获取到数据以后,接下来就须要存储数据了,数据的存储方法也很重要。
因此咱们学习的爬虫技术,实际上能够概括为请求、解析和存储三个基本问题。熟练掌握这三个问题对应的解决方法,爬虫技术就算是掌握了。你们在学习爬虫的过程当中,牢牢围绕这三个问题展开,就不会走弯路了。
本节给你们介绍了爬虫的基本概念,让你们对爬虫有一个大体的了解,以便后续章节的学习。开胃菜吃完了