目录

  • 什么是爬虫
  • 爬虫的用途
  • 怎样实现爬虫
  • 爬虫流程
  • 模拟发送请求
  • 请求包含哪些内容
  • 爬虫要怎样发请求
  • 接收服务器数据
  • 解析内容
  • 保存数据
  • 模拟页面操作
  • 结语


什么是爬虫

平时我们上网,是通过点击浏览器中的各种链接(或在浏览器中输入一个URL地址),打开对应的网页,然后用眼睛从网页中找到我们感兴趣的内容,最后把内容存储在我们大脑中的一系列动作。
爬虫就是把上述过程通过代码进行自动化处理的程序

爬虫的用途

相信看到这篇文章的人直接或间接的使用过爬虫。

  • 搜索引擎
    搜索引擎 (百度、Google)就是爬虫的产物。它们把网上的各种网页信息进行爬取后,按照一定的格式把网页信息进行存储,当用户通过搜索引擎进行查询时,通过算法把相关内容呈献在搜索结果中,然后用户通过点击链接就能跳转到对应网站。
  • 商品比价
    同一商品在不同平台的价格爬取,然后把结果呈现给用户。
  • 信息收集
    把感兴趣的文章等信息从网上爬取后存储在本地,即使在断网的情况下也能随时进行阅读。
  • 其它
    爬虫的功能还有很多,比较海量数据的爬取及分析等。每个人都有不同的需求,总之只要是能人工从网络上获取的信息,基本上都可以通过爬虫来实现自动化。

怎样实现爬虫

本篇不涉及具体代码,只从原理上讲怎样实现爬虫,为后面用代码实现爬虫功能打下理论基础。

爬虫流程

前文提到爬虫是上网获取信息的自动化程序,通过浏览器访问网页的大致流程如下:

python爬虫意义 python爬虫概述_原理

其中服务器处理及响应我们的代码控制不了,所以不用考虑;浏览器怎样呈现数据我们不关心,所以也不考虑。
所以对于爬虫要关心的流程如下:

python爬虫意义 python爬虫概述_python_02


接下来分节来说明怎么自动化实现这个过程:

模拟发送请求

请求包含哪些内容

在我们通过浏览器上网过程中,是浏览器请求发送给服务器

例:在浏览器地址栏中输入:【https://www.baidu.com/s?wd=python】后回车,浏览器就向百度服务器发起了请求(Request)。这个请求中包含了以下内容,如图:

python爬虫意义 python爬虫概述_原理_03


其中**请求头(Request Headers)**格式是基本固定的:

  1. 第一行包含了以下信息:
    1.1 方法:GET 或 POST
    1.2 资源路径:相对于主机的路径(例中为【/s?wd=python】)
    1.3 协议/协议版本:例子使用的是HTTP协议,版本为1.1
  2. 第二行包含的是域名(例中为【www.baidu.com】)
  3. 其它行信息:
    3.1 User-Agent:告诉服务器当前是通过什么工具连接到服务器的
    3.2 Cookie:保存了服务器与浏览器交互的一些常用信息
    3.3 其它头信息以后遇到时再详细说明
  4. 如果是POST方法,那么请求还包括一个Body,包含用户数据(如:创建用户等所填写的表单数据)

爬虫要怎样发请求

简单的爬虫在发送一个请求时,可能没有完全包含上述请求头(Request Headers)中提到的内容。在服务器在接收到请求后,会对请求进行分析,如果发现不是从正规渠道来的请求(如爬虫),则会返回错误页面。
所以爬虫要做的是怎样模拟出和浏览器发出一样的请求内容,让服务器分辨不出请求的来源是爬虫程序。

接收服务器数据

服务器向浏览器返回HTTP响应,响应包括:响应头(Response Headers)与响应内容(Response Body)

  1. 响应头(Response Headers)
    1.1 响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误
    1.2 响应类型:由Content-Type指定,例如:Content-Type: text/html;charset=utf-8表示响应类型是HTML文本,并且编码是UTF-8,Content-Type: image/jpeg表示响应类型是JPEG格式的图片
  2. 响应内容(Response Body)
    页面所对应的HTML代码

解析内容

待解析的内容,实际上就是上述从服务器接收到的HTML代码。了解HTML基础知识是内容解析的前提。有一个基本认知即可,不用太深入。

在Chrome浏览器中,可以通过F12键来查看一个页面的HTML内容,如下图:

python爬虫意义 python爬虫概述_服务器_04


可以看到在HTML中,是通过各种<标签>内容</标签>的形式来封装各种内容的。所以解析内容,就是对各种标签进行提取和解析

保存数据

从服务器返回内容中提取出有效数据后,要对其进行持久化保存,这样方便以后使用。
通常数据保存方式有以下两种:

  1. 文件
    如:txt文本文件,Excel文件等
  2. 数据库
    如:Mysql等关系型数据库,Mongdb、Redis等Nosql数据库等

模拟页面操作

就像用户操作一样,通过页面上的链接不断跳转到新的页面进行浏览。爬虫会分析出网页中有哪个可跳转的链接(URL),然后根据需要向该URL发出新的请求,使爬虫可以不断爬取到新的内容(已经爬取过的URL不会再爬取,这个操作叫做去重)。
如果要爬取的只有1个页面,该步骤就不需要了。

结语

了解了爬虫的基本知识,就可以用代码去实现了。在后续的文章中,我会用Python去实现相关功能,敬请期待。