作为程序员,相信大家对“爬虫”这个词并不陌生,身边常常会有人提这个词,在不了解它的人眼中,会觉得这个技术很高端很神秘。不用着急,我们的爬虫系列就是带你去揭开它的神秘面纱,探寻它真实的面目。

爬虫是什么

网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

通俗地讲,我们把互联网比作一张大蜘蛛网,每个站点资源比作蜘蛛网上的一个结点,爬虫就像一只蜘蛛,按照设计好的路线和规则在这张蜘蛛网上找到目标结点,获取资源。

为什么使用爬虫

为什么我们需要使用爬虫呢?

大家可以想象一下一个场景:你非常崇拜一个微博名人,对他的微博非常着迷,你想把他十年来微博上的每一句话摘抄下来,制作成名人语录。这个时候你怎么办呢?手动去 Ctrl+C 和 Ctrl+V 吗?这种方法确实没错,数据量小的时候我们还可以这样做,但是数据成千上万的时候你还要这样做吗?

我们再来想象另一个场景:你要做一个新闻聚合网站,每天需要定时去几个新闻网站获取最新的新闻,我们称之为 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,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL 的格式由三部分组成:

  • 第一部分是协议(或称为服务方式)。
  • 第二部分是存有该资源的主机IP地址(有时也包括端口号)。
  • 第三部分是主机资源的具体地址,如目录和文件名等。

由于爬虫的目标是获取资源,而资源都存储在某个主机上,所以爬虫爬取数据时必须要有一个目标的 URL 才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。

爬虫的流程

我们接下来的篇章主要讨论聚焦爬虫,聚焦爬虫的工作流程如下图:

spider_flow

  • 首先我们需要有一个种子 URL 队列,这个队列中的 URL 相当于我们蜘蛛爬行的第一个结点,是我们在大网中爬行的第一步。
  • 对队列中的每一个 URL 进行请求,我们会得到响应内容,通常响应内容为HTML。如果响应内容里面有我们的目标 URL,提取出来加入 URL 队列中。
  • 解析响应内容,提取我们需要的数据。
  • 存储数据,我们可以将数据存储到数据库、文件等。

从这个爬虫的流程来看,大家应该能够联想到学习爬虫需要学习的关键步骤。首先我们需要像浏览器一样请求某个 URL ,来获取某个主机的资源,那么请求的方法和正确地获取内容就是我们学习的重点。我们获取到资源(也就是请求 URL 之后获得的响应内容)之后,我们需要对响应的内容进行解析,从而获取到对我们有价值的数据,这里面的解析方法就是学习的重点了。我们获取到数据之后,接下来就需要存储数据了,数据的存储方法也很重要。

所以我们学习的爬虫技术,实际上可以归纳为请求解析存储三个基本问题。熟练掌握这三个问题对应的解决方法,爬虫技术就算是掌握了。大家在学习爬虫的过程中,紧紧围绕这三个问题展开,就不会走弯路了。

总结

本节给大家介绍了爬虫的基本概念,让大家对爬虫有一个大致的了解,以便后续章节的学习。开胃菜吃完了

Python 爬虫是什么的更多相关文章

  1. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  2. python爬虫成长之路(一):抓取证券之星的股票数据

    获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...

  3. python爬虫学习(7) —— 爬取你的AC代码

    上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...

  4. python爬虫学习(6) —— 神器 Requests

    Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...

  5. 批量下载小说网站上的小说(python爬虫)

    随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...

  6. python 爬虫(二)

    python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...

  7. Python 爬虫1——爬虫简述

    Python除了可以用来开发Python Web之后,其实还可以用来编写一些爬虫小工具,可能还有人不知道什么是爬虫的. 一.爬虫的定义: 爬虫——网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区 ...

  8. Python爬虫入门一之综述

    大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...

  9. [python]爬虫学习(一)

    要学习Python爬虫,我们要学习的共有以下几点(python2): Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy ...

  10. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

随机推荐

  1. JMeter配置JDBC测试SQL Server/MySQL/ORACLE

    一.配置SQL Server 1.下载sql驱动,将sqljdbc4.jar放到JMeter安装目录/lib下. 2.启动JMeter,右键添加->配置文件->JDBC Connectio ...

  2. pytorch神经网络解决回归问题(非常易懂)

    对于pytorch的深度学习框架,在建立人工神经网络时整体的步骤主要有以下四步: 1.载入原始数据 2.构建具体神经网络 3.进行数据的训练 4.数据测试和验证 pytorch神经网络的数据载入,以M ...

  3. centos 访问win共享

    yum install samba 安装samba (其实我们只用到samba里面的winbind以便我们能够用windows机器的名称找到该机器的网络地址,在下面叙述的过程会用到.而且也要确定在 w ...

  4. 七 MyBatis整合Spring,DAO开发(传统DAO&动态代理DAO)

    整合思路: 1.SQLSessionFactory对象应该放到Spring中作为单例存在 2.传统dao开发方式中,应该从Spring容器中获得SqlSession对象 3.Mapper代理行驶中,应 ...

  5. Immediate Decodability[UVA644](Trie入门)

    传送门 题意:给出一些数字串,判断是否有一个数字串是另一个串的前缀. 这题真的可以算是Trie树的一道模板题了. 先把Trie树建好,建树的时候记录一个sum表示一个节点有多少个串会包含此节点,然后再 ...

  6. STM32CubeIDE printf 串口重定向

  7. struts的错误回显

  8. 「CF1039D」You Are Given a Tree

    传送门 Luogu 解题思路 整体二分. 的确是很难看出来,但是你可以发现输出的答案都是一些可以被看作是关键字处于 \([1, n]\) 的询问,而答案的范围又很显然是 \([0, n]\),这不就刚 ...

  9. Python基础_ONLINE习题集_03 数据类型

    3.1 将元组(1,2,3) 和集合{"four",5,6}合成一个列表 tuple,set,list = (1,2,3),{"four",5,6},[] fo ...

  10. Maven 使用Nexus搭建Maven私服

    Maven学习 (四) 使用Nexus搭建Maven私服 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找 ...