网站首页 > 技术文章 正文
爬虫涉及的技术包括但不限于熟练一门编程语言(这里以 Python 为例) HTML 知识、HTTP 协议的基本知识、正则表达式、数据库知识,常用抓包工具的使用、爬虫框架的使用、涉及到大规模爬虫,还需要了解分布式的概念、消息队列、常用的数据结构和算法、缓存,甚至还包括机器学习的应用,大规模的系统背后都是靠很多技术来支撑的。(Python之禅 刘志军)
在阅读之前,建议先阅读我发的上篇 关于爬虫,HTML知识了解一下
常规的爬虫需要模拟浏览器的操作,才能去获取网页的信息;有些网站需要登录,才能获取更多的资料;更有些网站登录后需要保存cookie信息才能继续获取更多资料。解决这些“难题”,需要了解HTTP协议。
一、什么是HTTP协议?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。协议中规定了客户端应该按照什么格式给服务器发送请求,同时也约定了服务端返回的响应结果应该是什么格式。
HTTP 协议规定, 请求从客户端发出, 最后服务器端响应该请求并返回。** 即先从客户端开始建立通信的, 服务器端在没有接收到请求之前不会发送响应。**
例如:
客户端请求的正确打开方式是什么?服务器正确响应格式又是什么呢?
二、HTTP请求
HTTP 请求由3部分组成,分别是请求行、请求首部、请求体,首部和请求体是可选的,并不是每个请求都需要的。
(一)请求行
请求行是每个请求必不可少的部分,它由3部分组成,分别是请求方法(method)、请求URL(URI)、HTTP协议版本,以空格隔开。
以上图为例,起始行开头的GET表示请求访问服务器的类型, 称为方法(method) 。 随后的字符串 /index.htm 指明了请求访问的资源对象,也叫做请求 URI(request-URI) 。 最后的 HTTP/1.1, 即 HTTP 的版本号, 用来提示客户端使用的 HTTP 协议功能。Python学习关注,每天免费直播课程学习群:839383 765 分享业内最新python学习资料!
翻译过来就是:这段请求内容的意思是: 请求访问某台 HTTP 服务器上的/index.htm 页面资源。
HTTP协议中最常用的请求方法有:GET、POST、PUT、DELETE。GET 方法用于从服务器获取资源,90%的爬虫都是基于GET请求抓取数据。
请求 URL 是指资源所在服务器的路径地址,比如上图的例子表示客户端想获取 index.html 这个资源,它的路径在服务器 foofish.net 的根目录(/)下面。
关于URL和URI的区别,可看爬虫|URL和URI有什么不一样
(二)请求首部
因为请求行所携带的信息量非常有限,以至于客户端还有很多想向服务器要说的事情不得不放在请求首部(Header),请求首部用于给服务器提供一些额外的信息,比如 User-Agent 用来表明客户端的身份,让服务器知道你是来自浏览器的请求还是爬虫,是来自 Chrome 浏览器还是 FireFox(Python之禅 刘志军)。
因为客户端发送请求时,发送的数据(报文)是由字符串构成的,为了区分请求首部的结尾和请求体的开始,用一个空行来表示,遇到空行时,就表示这是首部的结尾,请求体的开始。
关于请求首部详情,推荐阅读《图解HTTP》进一步了解
(三)请求体
请求体是客户端提交给服务器的真正内容,比如用户登录时的需要用的用户名和密码,比如文件上传的数据,比如注册用户信息时提交的表单信息。
三、HTTP响应
服务端接收请求并处理后,返回响应内容给客户端,同样地,响应内容也必须遵循固定的格式浏览器才能正确解析。HTTP 响应也由3部分组成,分别是:响应行、响应首部、响应体,与 HTTP 的请求格式是相对应的。
(一)响应行
响应行同样也是3部分组成,由服务端支持的 HTTP 协议版本号、状态码、以及对状态码的简短原因描述组成。状态码是响应行中很重要的一个字段。状态码的职责是当客户端向服务器端发送请求时, 描述返回的请求结果。
借助状态码, 我们可以知道服务器端是正常处理了请求, 还是出现了错误。
关于状态码的类别
常见的状态码
想了解更多的状态码,可看HTTP状态码
(二)响应首部
响应首部和请求首部类似,用于对响应内容的补充,在首部里面可以告知客户端响应体的数据类型是什么?响应内容返回的时间是什么时候,响应体是否压缩了,响应体最后一次修改的时间。
(三)响应体
响应体是服务器返回的真正内容,它可以是一个HTML页面,或者是一张图片、一段视频等。
爬虫的行为本质上就是模拟浏览器发送HTTP请求,如果想在深入爬虫领域,理解 HTTP 协议是必须的。
参考资料:
1.快速理解HTTP协议
2.《图解HTTP》
3.Python爬虫学前普及
附:访问网页的过程中都发生了些什么?
来源:独家 | 一文读懂网络爬虫
完毕!更多python内容记得关注我们哦!
猜你喜欢
- 2024-10-03 Python访问网络 urllib.request 发送HTTP 请求
- 2024-10-03 python模块之aioHttp 异步请求(在crm中,哪个模块用于跟踪和管理客户服务请求)
- 2024-10-03 推荐几个最佳python应用服务器(一起学习吧)
- 2024-10-03 让 HTTP 服务人类——Python Requests 模块基本用法总结
- 2024-10-03 「Python」在HTTP请求使用长连接(keep-alive)提高传输效率
- 2024-10-03 干货分享丨Python的HTTP库及示例(http//www.python.org/downloads)
- 2024-10-03 微软太良心了,提供免费服务器可以搭建Python网站
- 2024-10-03 python爬虫必备库——requests(python爬虫需要的库)
- 2024-10-03 如何用Python语言开发大型服务器程序
- 2024-10-03 使用Python获取HTTP请求头数据(在python中用于获取用户输入的函数是)
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)