《从零开始学Scrapy网络爬虫》之网络爬虫基础(HTTP基本原理)1

近几年,随着人工智能呈现爆发式发展,网络爬虫也跟着火了起来,为什么?因为人工智能离不开海量数据,没有了数据,就没有所谓的人工智能,而从互联网中获取数据是最直接、最经济、最有效的方法。网络爬虫,就是用于从互联网中,以自动化的形式,获取海量数据。

网络爬虫实现的思想是模拟用户使用浏览器向网站发送请求,网站响应请求后,将HTML文档发送过来,爬虫再对网页做信息提取和存储。因此,了解浏览器与网站服务器之间的通信方式和交互过程,理解HTML页面的组织和结构,掌握页面信息的提取和存储技术,能进一步加深对网络爬虫原理的理解。

HTTP基本原理

来看一下用户从浏览器输入某个网址到获取网站内容的整个过程。该过程主要分为四个步骤,如图所示。

《从零开始学Scrapy网络爬虫》之网络爬虫基础(HTTP基本原理)1_第1张图片

  1. 在浏览器中输入URL地址(如百度:https://www.baidu.com),回车。
  2. 浏览器向网站服务器发送请求访问的命令。
  3. 网站服务器响应请求后,向浏览器发送HTML文档(也可以是图片、视频、JSON数据等其他资源)。
  4. 浏览器解析、渲染HTML文档后,将页面展示给用户。

下面详细讲解一下这些步骤中的关键知识,这将有助于我们更深地了解爬虫的基本原理。

URL

我们把在浏览器的地址栏里输入的网址叫做URL。URL全称Uniform Resource Locator,即统一资源定位符。URL用于确定分散在互联网中各种资源的位置和访问方式。例如摄图网中故宫博物馆的图片地址为http://seopic.699pic.com/photo/50088/2824.jpg_wh1200.jpg。它包含了以下几种信息。

  1. 访问协议:  http,用于确定数据传输的方式。
  2. 服务器名称:seopic.699pic.com,图片所在的网站服务器地址。
  3. 访问路径:  /photo/50088/,图片目录。
  4. 资源名:    2824.jpg_wh1200.jpg,图片名称。

HTTP和HTTPS协议

首先来看一下访问协议。为了保证浏览器能够正确解析并显示网站服务器传送的资源,需要制定一套双方都遵守的协议,最常见的有HTTP和HTTPS协议。当然还有其他功能的协议,如FTP(文件传输协议)、TELNET(远程登录服务)、FILE(本地文件传输协议)等。在爬虫中,通常是通过HTTP或HTTPS协议获取到页面的。

下面就来了解一下这两个协议。

HTTP全称HyperText Transfer Protocol,即超文本传输协议。是用于从网络中传输超文本到本地浏览器的传输协议,是互联网中应用最为广泛的一种网络协议。它能保证高效而准确地传送超文本文档,我们平常看到的HTML文档就是超文本文档。

HTTP协议以明文方式发送内容,不提供任何方式的数据加密。像银行卡号、密码等对安全性要求高的信息传输,就不能使用HTTP,而要使用HTTPS协议了。

HTTPS全称HyperText Transfer Protocol over Secure Socket Layer,即安全套接字层超文本传输协议。是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并对浏览器和服务器之间的通信加密。

现在越来越多的网站都开始采用安全级别更高的HTTPS协议了。

​​​​​​​HTTP请求(Request)

当用户通过浏览器访问某个网站时,浏览器会向网站服务器发送访问请求,这个请求就叫做HTTP请求。请求包含的内容主要有:

  1. 请求方法(Request Method)
  2. 请求网址(Request URL)
  3. 请求头(Request Headers)
  4. 请求体(Request Body)

为了更直观地说明这个过程,我们使用Chrome浏览器自带的“开发者工具”来查看浏览器发送的请求信息。以访问百度(https://www.baidu.com)为例。

  1. 打开Chrome浏览器,按F12键,显示“开发者工具”栏。
  2. 地址栏中输入百度网址:https://www.baidu.com,回车。
  3. “开发者工具”栏抓取到了许多浏览器请求以及服务器响应信息。按下图所示顺序选中各个选项,在第4步的Headers选项卡中,就能查看到请求信息了。

《从零开始学Scrapy网络爬虫》之网络爬虫基础(HTTP基本原理)1_第2张图片

 

下面来看一下浏览器向百度的网站服务器发送了哪些请求信息。

请求方法(Request Method)

HTTP协议定义了许多与服务器交互的方法,最常用的有GETPOST方法。

如果浏览器向服务器发送一个GET请求,请求的参数信息会直接包含在URL中。例如在百度搜索栏中输入“scrapy”,点击“百度一下”按钮,就形成了一个GET请求。搜索结果页面的URL变为https://www.baidu.com/s?wd=scrapyURL中问号(?)后面的wd=scrapy就是请求的参数,表示要搜寻的关键字。

POST请求主要用于表单的提交。表单中输入的卡号、密码等隐私信息通过POST请求方式提交后,数据不会暴露在URL中,而是保存于请求体中,避免了信息的泄露。

请求网址(Request URL

这里请求的网址为https://www.baidu.com/,即百度主页的URL地址。另外,还有一个选项Remote Address的值为180.97.33.107:443,这是百度服务器的IP地址,也可以使用IP地址来访问百度。

请求头(Request Headers

请求头的内容在Headers选项卡中的Request Headers目录下,如图2-3所示。请求头中包含了许多有关客户端环境和请求正文的信息,比较重要的信息有Cookie、User-Agent等。

下面简单介绍一下常用的请求头信息。

  1. Accept:浏览器端可以接受的媒体类型。text/html代表浏览器可以接受服务器发送的文档类型为text/html,也就是我们常说的HTML文档。
  2. Accept-Encoding:浏览器接受的编码方式。
  3. Accept-Language:浏览器所接受的语言种类。
  4. Connection:表示是否需要持久连接。keep-alive表示浏览器与网站服务器保持连接;close表示一个请求结束后,浏览器和网站服务器就会断开,下次请求时需重新连接。
  5. Cookie:有时也用复数形式Cookies,指网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密),由网站服务器创建。例如当我们登录后,访问该网站的其他页面时,发现都是处于登录状态,这是Cookie在发挥作用。因为浏览器每次在请求该站点的页面时,都会在请求头中加上保存有用户名和密码等信息的Cookie并将其发送给服务器,服务器识别出该用户后,就将页面发送给浏览器。在爬虫中,有时需要爬取登录后才能访问的页面,通过对Cookie的设置,就可以成功访问登录后的页面了。
  6. Host:指定被请求资源的Internet主机和端口号,通常从URL中提取出来。
  7. User-Agent:告诉网站服务器,客户端使用的操作系统和浏览器的名称和版本、CPU版本、浏览器渲染引擎、浏览器语言等。在爬虫中,设置此项可以将爬虫伪装成浏览器。

请求体(Request Body

请求体中保存的内容一般是POST请求发送的表单数据。对于GET请求,请求体为空。

​​​​​​​​​​​​​​HTTP响应(Response)

当网站服务器接收到浏览器的请求后,会发送响应消息给浏览器,这个响应就叫做HTTP响应。一个完整的响应消息主要包含:

  1. 响应状态码(Response Status Code)
  2. 响应头(Response Headers)
  3. 响应体(Response Body)

响应状态码(Response Status Code

状态码表示服务器对请求的响应结果。例如200代表服务器响应成功,403代表禁止访问,404代表页面未找到,408代表请求超时。浏览器会根据状态码做出相应的处理。在爬虫中,可以根据状态码来判断服务器的状态,如果状态码为200,则继续处理数据,否则直接忽略。下表列举了常见的状态码。

表- 常见状态码及说明

状态码

说明

详情

100

继续

服务器已收到请求的一部分,客户端应该继续发送

101

切换协议

请求者已要求服务器切换协议,服务器已确认并准备切换

200

成功

服务器已成功处理了请求

201

已创建

请求成功并且服务器创建了新的资源

202

已接受

服务器已接受请求,但尚未处理

203

非授权信息

服务器成功处理了请求,但返回的信息可能来自另一来源

204

无内容

服务器成功处理了请求,但没有返回任何内容

205

重置内容

服务器成功处理了请求,但没有返回任何内容

206

部分内容

服务器成功处理了部分GET请求

300

多种选择

针对请求,服务器可执行多种操作

301

永久移动

请求的网页已永久移动到新位置

302

临时移动

请求的网页暂时跳转到其他页面

400

错误请求

服务器不理解请求的语法

401

未授权

请求要求身份验证

403

禁止

服务器拒绝请求

404

未找到

服务器找不到请求的网页

405

方法禁用

禁用请求中指定的方法

406

不接受

无法使用请求的内容特性响应请求的网页

407

需要代理授权

401(未授权)类似,但指定请求者应当授权使用代理

408

请求超时

服务器等候请求时发生超时

409

冲突

服务器在完成请求时发生冲突

410

已删除

请求的资源已永久删除

411

需要有效长度

服务器不接受不含有效内容长度标头字段的请求

412

未满足前提条件

服务器未满足请求者在请求中设置的其中一个前提条件

413

请求实体过大

实体过大,超出服务器的处理能力

414

URI过长

请求的URI(通常为网址)过长

415

不支持的媒体类型

请求的格式不受请求页面的支持

500

服务器内部错误

服务器遇到错误,无法完成请求

501

尚未实施

服务器不具备完成请求的功能

502

错误网关

服务器作为网关或代理,从上游服务器收到无效响应

503

服务不可用

服务器目前无法使用

504

网关超时

没有及时从上游服务器收到请求

505

HTTP版本不支持

服务器不支持请求中所用的HTTP协议版本

 

响应头(Response Headers

响应头包含了服务器对请求的应答信息。在Chrome浏览器的“开发者工具”中,响应头的内容在Headers选项卡中的Response Headers目录中,如图2-4所示。

《从零开始学Scrapy网络爬虫》之网络爬虫基础(HTTP基本原理)1_第3张图片

下面简单介绍一下常用的头信息。

  1. Date:服务器响应时间。
  2. Content-Type:返回数据的文档类型,如text/html代表返回HTML文档;application/x-javascript代表返回JavaScript文件;image/jpeg代表返回图片。
  3. Content-Encoding:服务器支持的返回内容压缩编码类型。
  4. Server:服务器软件的名称。
  5. Set-Cookie:设置HTTP Cookie。
  6. Expires:响应过期的日期和时间。

响应体(Response Body

响应体中存放服务器发送给浏览器的正文数据。在Chrome浏览器的“开发者工具”中,与Headers选项卡平行的Response选项卡中存储的就是响应体数据。比如请求访问百度首页时,它的响应体就是百度首页的HTML代码,如图所示。

《从零开始学Scrapy网络爬虫》之网络爬虫基础(HTTP基本原理)1_第4张图片

 

当访问摄图网中故宫博物馆的图片(http://seopic.699pic.com/photo/50088/2824.jpg_wh1200.jpg)时,它的响应体就是一张图片的二进制数据。Response选项卡中无法显示图片数据,在左边的Preview选项卡中可以预览,如图所示。

《从零开始学Scrapy网络爬虫》之网络爬虫基础(HTTP基本原理)1_第5张图片

 

在爬虫中,我们从响应体中获取HTML代码、JSON数据、网络图片等,然后从中提取相应的内容。

节选自书籍:《从零开始学Scrpay网络爬虫》,作者张涛

下一节继续讲解:《从零开始学网络爬虫》之网络爬虫基础(网页基础)

你可能感兴趣的:(《从零开始学Scrapy网络爬虫》之网络爬虫基础(HTTP基本原理)1)