林小白
林小白
11天前 · 9 人阅读

日拱一卒|数据挖掘008

爬虫涉及的技术包括但不限于熟练一门编程语言(这里以 Python 为例) HTML 知识、HTTP 协议的基本知识、正则表达式、数据库知识,常用抓包工具的使用、爬虫框架的使用、涉及到大规模爬虫,还需要了解分布式的概念、消息队列、常用的数据结构和算法、缓存,甚至还包括机器学习的应用,大规模的系统背后都是靠很多技术来支撑的。(Python之禅 刘志军)

在阅读之前,建议先阅读 关于爬虫,你需要知道的HTML知识

常规的爬虫需要模拟浏览器的操作,才能去获取网页的信息;有些网站需要登录,才能获取更多的资料;更有些网站登录后需要保存cookie信息才能继续获取更多资料。解决这些“难题”,需要了解HTTP协议。

一、什么是HTTP协议?

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。协议中规定了客户端应该按照什么格式给服务器发送请求,同时也约定了服务端返回的响应结果应该是什么格式。

1

2

HTTP 协议规定, 请求从客户端发出, 最后服务器端响应该请求并返回。** 即先从客户端开始建立通信的, 服务器端在没有接收到请求之前不会发送响应。**

例如:


3

客户端请求的正确打开方式是什么?服务器正确响应格式又是什么呢?

二、HTTP请求

HTTP 请求由3部分组成,分别是请求行、请求首部、请求体,首部和请求体是可选的,并不是每个请求都需要的。

4

(一)请求行

请求行是每个请求必不可少的部分,它由3部分组成,分别是请求方法(method)、请求URL(URI)、HTTP协议版本,以空格隔开。

以上图为例,起始行开头的GET表示请求访问服务器的类型, 称为方法(method) 。 随后的字符串 /index.htm 指明了请求访问的资源对象,也叫做请求 URI(request-URI) 。 最后的 HTTP/1.1, 即 HTTP 的版本号, 用来提示客户端使用的 HTTP 协议功能。

翻译过来就是:这段请求内容的意思是: 请求访问某台 HTTP 服务器上的/index.htm 页面资源。

HTTP协议中最常用的请求方法有:GET、POST、PUT、DELETE。GET 方法用于从服务器获取资源,90%的爬虫都是基于GET请求抓取数据。

5

请求 URL 是指资源所在服务器的路径地址,比如上图的例子表示客户端想获取 index.html 这个资源,它的路径在服务器 foofish.net 的根目录(/)下面。

关于URL和URI的区别,可看爬虫|URL和URI有什么不一样

(二)请求首部

因为请求行所携带的信息量非常有限,以至于客户端还有很多想向服务器要说的事情不得不放在请求首部(Header),请求首部用于给服务器提供一些额外的信息,比如 User-Agent 用来表明客户端的身份,让服务器知道你是来自浏览器的请求还是爬虫,是来自 Chrome 浏览器还是 FireFox(Python之禅 刘志军)。

6

因为客户端发送请求时,发送的数据(报文)是由字符串构成的,为了区分请求首部的结尾和请求体的开始,用一个空行来表示,遇到空行时,就表示这是首部的结尾,请求体的开始。

关于请求首部详情,推荐阅读《图解HTTP》进一步了解

7

(三)请求体

请求体是客户端提交给服务器的真正内容,比如用户登录时的需要用的用户名和密码,比如文件上传的数据,比如注册用户信息时提交的表单信息。


8

三、HTTP响应

服务端接收请求并处理后,返回响应内容给客户端,同样地,响应内容也必须遵循固定的格式浏览器才能正确解析。HTTP 响应也由3部分组成,分别是:响应行、响应首部、响应体,与 HTTP 的请求格式是相对应的。

9

(一)响应行

响应行同样也是3部分组成,由服务端支持的 HTTP 协议版本号、状态码、以及对状态码的简短原因描述组成。状态码是响应行中很重要的一个字段。状态码的职责是当客户端向服务器端发送请求时, 描述返回的请求结果。

10

借助状态码, 我们可以知道服务器端是正常处理了请求, 还是出现了错误。

关于状态码的类别

11

常见的状态码

11

想了解更多的状态码,可看HTTP状态码

(二)响应首部

响应首部和请求首部类似,用于对响应内容的补充,在首部里面可以告知客户端响应体的数据类型是什么?响应内容返回的时间是什么时候,响应体是否压缩了,响应体最后一次修改的时间。

(三)响应体

响应体是服务器返回的真正内容,它可以是一个HTML页面,或者是一张图片、一段视频等。

爬虫的行为本质上就是模拟浏览器发送HTTP请求,如果想在深入爬虫领域,理解 HTTP 协议是必须的。

参考资料:
1.快速理解HTTP协议
2.《图解HTTP》
3.Python爬虫学前普及


附:访问网页的过程中都发生了些什么?
来源:独家 | 一文读懂网络爬虫

12

13


公众号推荐:
Python之禅

数据派THU

收藏 0
响应 请求 首部 客户端 http 爬虫
评论 ( 0 )