爬虫基础:网络请求与响应
HTTP和HTTPS
- HTTP 是 Hyper Text Transfer Protocol超文本传输协议(的缩写)。HTTP是用来将数据(文本、图片、音频、视频等)从Web服务器传递到本地浏览器的一种传送协议,它能保证高效而准确地传送超文本文档。
- HTTPS 是 Hyper Text Transfer Protocol over Secure Socket Layer,的缩写,是以安全为目标的HTTP 通道,简单来讲就是 HTTP 的安全版,即 在HTTP 下加入 SSL 层,简称为 HTTPS。
HTTP请求过程
网络请求详解
HTTP请求语义(方法)
HTTP有8种请求语义(或称为方法),不同的语又拥有不同的功能,简要介绍如下,
- GET:从服务器获取数据。
- POST:从客户端把数据提交到服务器端,
- PUT:从客户端把数据提交到服务端,并替换原有数据。
- DELETE:请求服务器删除对应数据。
- HEAD:从服务器获取资源响应报头(不常用)。
- CONNECT:将服务器作为代理服务器,通过CONNECT请求,让代理服务器去请求目标页面(不常用)。
- OPTIONS:允许客户端查看服务器端性能(不常用)。
- TRACE:请求服务端回传收到的消息,用于测试(不常用)。
一般情况下,一个链接会指定HTTP的请求方式,就是指定语义。若是目标链接只支持POST方式的请求,爬虫就不能发送GET请求,否则请求会被服务器拒绝。
请求网址
请求的网址,即统一资源定位符 URL,它可以唯一确定我们想请求的资源。
请求头
请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、Referer、User-Agent 等。下面简要说明一些常用的头信息。
-
Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
-
Accept-Language:指定客户端可接受的语言类型。
-
Accept-Encoding:指定客户端可接受的内容编码。
-
Host:用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。从HTTP 1.1 版本开始,请求必须包含此内容。
-
Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是 Cookies的功劳。Cookies 里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookies 并将其发送给服务器,服务器通过 Cookies 识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。
-
Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如作来源统计、防盗链处理等。
-
User-Agent:简称 UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏觅器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫。
-
Content-Type:也叫互联网媒体类型(Internet Media Type)或者 MIME 类型,在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html 代表 HTML 栺式,image/gif 代表 GIF 图片,application/json 代表 JSON 类型,更多对应关系可以查看此对照表:
http://tool.oschina.net/commons
因此,请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头。
请求体
请求体一般承载的内容是 POST 请求中的表单数据,而对于GET 请求,请求体则为空。
在爬虫中,如果要构造 POST 请求,需要使用正确的的Content-Type,并了解各种请求库的各个参数设置时使用的是哪种 Content-Type,不然可能会导致 POST 提交后无法正常响应。
网络请求Network各列的含义
以百度为例:
- 第一列 Name:请求的名称,一般会将 URL 的最后一部分内容当作名称。
- 第二列 Status:响应的状态码,这里显示为 200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
- 第三列 Type:请求的文档类型。这里为 document,代表我们这次请求的是一个 HTML 文档,内容就是一些 HTML 代码。
- 第四列 Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
- 第五列 Size:从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示from cache。
- 第六列 Time:发起请求到获取响应所用的总时间。
第七列 Waterfall:网络请求的可视化瀑布流。
响应
响应,由服务端返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)。
响应状态码
响应状态码表示服务器的响应状态,如 200 代表服务器正常响应,404 代表页面未找到,500 代表服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为 200,则证明成功返回数据,再进行进一步的处理,否则直接忽略。
响应头包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等。下面简要说明一些常用的头信息。
- Date:标识响应产生的时间。
- Last-Modified:指定资源的最后修改时间。
- Content-Encoding:指定响应内容的编码。
- Server:包含服务器的信息,比如名称、版本号等。
- Content-Type:文档类型,指定返回的数据类型是什么,如 text/html 代表返回 HTML 文档,application/x-javascript 则代表返回 JavaScript 文件,image/jpeg 则代表返回图片。
- Set-Cookie:设置 Cookies。响应头中的 Set-Cookie 告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 请求。
- Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。
响应体
最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML 代码;请求一张图片时,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体。
部分资源来源于网络,如有侵权,请联系本人予以删除!资源作为交流使用,请勿用于商用。