网络爬虫前奏:HTTP的请求与响应

Posted AI编程笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络爬虫前奏:HTTP的请求与响应相关的知识,希望对你有一定的参考价值。

大家可以先想一下自己日常的上网活动:当你在搜索框内输入要搜索的内容,一按Enter,片刻后搜索内容就显示在屏幕上。这其实可以分为四步:
  • 输入URL按回车,浏览器向服务器发送了HTTP请求

  • 服务器根据请求把响应文件发送给浏览器

  • 浏览器分析响应的html,发现其中引用了很多其他文件(CSS文件、JS文件以及image文件等)。浏览器会再向服务器发送请求去获取这些文件

  • 当所有的文件都下载成功后,网页根据HTML语法结构完整地显示在屏幕上

其实,网络爬虫就是模拟人和浏览器的这种操作。
两者不同之处在于对服务器响应内容的处理:浏览器会根据HTML语法结构对响应的HTML进行解析,并完整地显示在屏幕上;而网络爬虫是从响应的HTML中解析提取需要的数据,然后将其保存下来。
也许你已经初步对网络爬虫过程有了些许认知,强烈建议在学习网络爬虫之前,先了解了解以下这些内容:
  • HTTP传输协议

  • HTML网页结构

听君一句劝,少走十年路。先了解这些内容将大大有助于理解网络爬虫的整体逻辑,更重要的是会大大提高学习效率。
浏览器与服务器进行信息传输:首先,使用URL标识资源的位置;然后,使用HTTP提交和获取资源。
URL是统一资源定位符,是用于完整描述Internet上网页和其它资源的地址的一种标识方法。基本格式如下:
scheme://host[:port#]/path/.../[?query-string][#anchor]
  • scheme:协议(http、https等)

  • port#:服务器端口

  • path:访问资源的路径

  • query-string:参数,发送给http服务器的数据

  • anchor:跳转到网页的指定锚点位置

HTTP是浏览器与服务器之间进行信息传输需要遵循的一种协议。这种协议其实就是一个简单的请求-响应协议,它指定了浏览器可以发送给服务器什么消息以及浏览器可以得到什么响应。

网络爬虫前奏:HTTP的请求与响应

< HTTP请求 >

浏览器发送一个HTTP请求给服务器的请求消息,包括四部分:请求行、请求头、空行以及请求体。
一个HTTP请求示例:

网络爬虫前奏:HTTP的请求与响应

请求行:GET /item/%E7%99%BE%E5%BA%A6/6699 HTTP/1.1,包含三部分:

  • 请求方式:GET,HTTP请求主要有GETPOST两种方法

  • URL:/item/%E7%99%BE%E5%BA%A6/6699

  • HTTP协议及版本:HTTP/1.1

常用的请求头有:

  1. Host:主机和端口号

  2. Accept:客户端可接受的内容类型

  3. Accept-Encoding:客户端支持的压缩方式

  4. Accept-Charset:客户端可接受的字符编码集

  5. User-Agent:浏览器名称

  6. Accept-Language:客户端可接受的语言

  7. Referer:页面跳转处,可以表明产生请求的网页的来源

  8. Connection:表示客户端与服务器的连接类型

  9. Cookie:浏览器用这个属性向服务器发送Cookie

  10. Content-Type:POST请求里用来表示消息体的媒体类型和编码

  11. Content-Length:POST请求中请求体的长度

空行:作用就是分开请求头和请求体。
请求体:若请求方式为GET,请求体为空;若为POST方法,则在请求体中存放要提交的表单的键值对。
< HTTP响应 >
浏览器收到服务器的一个HTTP响应,响应消息也包括四部分:响应行、响应头、空行以及响应体。
一个HTTP响应的示例:
响应行: HTTP/1.1 200 OK ,由HTTP协议及版本(HTTP/1.1)和状态码及状态(200 OK)组成。
响应状态码有三位数字组成,第一个数字定义了响应的类别,有以下几种取值:
  • 1xx:表示服务器已成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程

  • 2xx:表示服务器已成功接收请求并已完成整个处理过程,常用200

  • 3xx:表示为完成请求,客户端需要采取进一步细化请求

  • 4xx:表示请求有错误,常用404或403

  • 5xx:表示服务器出现错误,常用500

 常用的响应头有:
  1. Cache-Control:这个值表示服务端不希望客户端缓存资源

  2. Connection:keep-alive,回应客户端的Connection

  3. Content-Encoding:告诉客户端,服务器发送的资源采用的压缩方式

  4. Content-Type:告诉客户端,资源文件的类型以及编码方式

  5. Date:服务器发送资源的时间

  6. Server:告诉客户端,服务器的信息

  7. Transfer-Encoding:chunked,告诉客户端服务器分块发送资源

响应体 就是响应的消息:返回的响应消息包含有不同类型的文件,图中红框内就是响应的文件类型,response下就是返回的具体内容。 如果是 纯数据 就返回 纯数据 如果是HTML 则返回 HTML 代码 如果是 JS 返回JS代码 ,等等

以上是关于网络爬虫前奏:HTTP的请求与响应的主要内容,如果未能解决你的问题,请参考以下文章

爬虫前奏

爬虫-2.HTTP请求与响应

Python爬虫-02:HTTPS请求与响应,以及抓包工具Fiddler的使用

Python爬虫_HTTP的请求与响应

Python爬虫入门之二HTTP/HTTPS请求与响应

小爬虫学习——爬虫原理