《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理

这篇具有很好参考价值的文章主要介绍了《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 爬虫基础

1.1 HTTP基本原理

1.1.1 URI和URL

URI,全称Uniform Resource Identifier,即统一资源标志符URL,全称Uniform Resource Locator,即统一资源定位符

​ 举例来说,https://github.com/favicon.ico既是一个URI,也是一个URL。即有favicon.ico这样一个图标资源,用这样一个URI/URL指定了访问它的唯一方式,其中包括访问协议https、访问路径(即根目录)和资源名称。通过一个链接,便可以从互联网中找到某个资源,这个链接就是URI/URL。

​ URL是URI的子集,也就是说每个URL都是URI,但并非每个URI都是URL。除了URL,URI还包括一个子类,叫做URN,全称Uniform Resource Name,即统一资源名称。URN只为资源命名而不指定如何定位资源。在目前的互联网中,URN使用非常少,所以几乎所有的URI都是URL。

​ URL遵循一定的格式规范,其基本组成格式如下:

scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]

​ 其中,中括号包括的内容代表非必要部分。下面介绍几部分代表的含义和作用。

  • **scheme:协议。**常用的协议有http、https、ftp等,另外也常被称作protocol。
  • **username、password:用户名和密码。**在某些情况下URL需要提供用户名和密码才能访问。
  • **hostname:主机地址。**可以是域名或IP地址。
  • **port:端口。**服务器设定的服务端口,http协议的默认端口为80,https协议的默认端口为443。
  • **path:路径。**指的是网络资源在服务器中的指定地址。
  • **parameters:参数。**用来指定访问某个资源时的附加信息。
  • **query:查询。**用来查询某类资源,如果有多个查询,则用&隔开。
  • **fragment:片段。**对资源描述的部分补充,可以理解为资源内部的书签。现在主要用于单页面路由和HTML锚点。

1.1.2 HTTP和HTTPS

​ 在爬虫中,我们抓取的页面主要是基于http或https协议的,因此应首先了解一下两个协议的含义。

HTTP的全称是Hypertext Transfer Protocol,即超文本传输协议,作用是把超文本数据从网络传输到本地浏览器,能够保证高效而准确地传输超文本文档。HTTPS的全称是Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单讲就是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。HTTPS的安全基础是SSL,因此通过该协议传输的内容都是经过SSL加密的,SSL的作用主要有以下两种:

  • 建立一个信息安全通道,保证数据传输的安全性。
  • 确认网站的真实性。

1.1.3 HTTP请求过程

​ 在浏览器地址栏中输入一个URL,按下回车之后可观察到对应的页面内容。实际上,这个过程是浏览器先向网站所在的服务器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的响应,接着传回浏览器。由于响应里包含页面的源代码等内容,所以浏览器再对其进行解析,便将网页呈现出来。

​ 打开浏览器,访问百度,此时单机鼠标右键并选择“检查”菜单即可打开浏览器的开发者工具,如图1-1-1所示。

《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理,网络爬虫开发实战学习笔记,爬虫,学习,笔记

图1-1-1 开发者工具界面

​ 切换到Network(网络)面板,然后刷新网页,可以看到在Network(网络)面板下方出现很多条目,其中一个条目就代表一次发送请求和接收响应的过程,如图1-1-2所示。

《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理,网络爬虫开发实战学习笔记,爬虫,学习,笔记

图1-1-2 Network(网络)界面

​ 观察www.baidu.com,其中各列的含义如下:

  • 第一列名称:请求的名称。一般用URL的最后一部分内容作为名称。
  • 第二列状态:响应的状态码。这里显示为200,表示响应正常。通过状态码,可以判断发送请求之后是否得到了正常的响应。
  • 第三列协议:请求的协议类型。
  • 第四列类型:请求的文档类型。这里为document,代表这次请求的是一个HTML文档,内容是一些HTML代码。
  • 第五列发起程序:请求源。用来标记请求是由哪个对象或进程发起的。
  • 第六列大小:从服务器下载的文件或请求的资源大小。如果资源是从缓存中取得的,则该列会显示from cache。
  • 第七列时间:从发起请求到获取响应所花的总时间。
  • 第八列时间线:网络请求的可视化瀑布流。

​ 单击这个条目,即可看到其更详细的信息,如图1-1-3所示。

《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理,网络爬虫开发实战学习笔记,爬虫,学习,笔记

图1-1-3 详细信息

​ 首先是常规项,其中请求URL为主机请求的URL,请求方法为主机请求的方法,状态代码为响应状态码,远程地址为远程服务器的地址和端口,引用者策略为引用者判别策略。

​ 继续往下可以看到相应标头和请求标头。请求头中包含许多请求信息,这些是请求的一部分,服务器会根据请求头里的信息判断请求是否合法,进而做出对应的响应。响应头是相应的一部分,其中包含服务器的类型、文档类型、日期等信息,浏览器在接收到响应后,会对其进行解析,进而呈现网页内容。

1.1.4 请求

请求,英文为Request,由客户端发往服务器,分为四部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)。下面分别介绍:

1.请求方法

​ 请求方法,用于标识请求客户端请求服务端的方式,常见的请求方法有两种:GETPOST

​ 在浏览器中直接输入URL并回车,便发起了一个GET请求,请求的参数会直接包含到URL里。POST请求大多在提交表单时发起,其数据通常以表单的形式传输,而不会体现在URL中。

​ GET请求和POST请求有如下区别:

  • GET请求的参数包含在URL里,数据可以在URL中看到;而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
  • GET请求提交的数据最多只有1024字节,POST方式则没有限制。

​ 我们平常遇到的绝大多数请求是GET或POST请求。其实除了这两个,还有一些请求方法,如HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE等,我们简单将请求方法总结为表1-1-1。

表1-1-1 请求方法
方法 描述
GET 请求页面,并返回页面内容
HEAD 类似于GET请求,不过返回的响应中没有具体内容。用于获取报头
POST 大多用于提交表单或上传文件,数据包含在请求体中
PUT 用客户端传向服务器的数据替代指定文档中的内容
DELETE 请求服务器删除指定的页面
CONNECT 把服务器当做跳板,让服务器代替客户端访问其他网页
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求。主要用于测试或诊断

2.请求的网址

​ 请求的网址,它可以唯一确定客户端向请求的资源。

3.请求头

​ 请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、User-Agent等。下面简单介绍一些常用的请求头信息:

  • Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
  • Accept-Language:用于指定客户端可接受的语言类型。
  • Accept-Encoding:用于指定客户端可接受的内容编码。
  • Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。
  • Cookie:网站为了辨别用户,进行会话跟踪而存储在用户本地的数据。主要功能是维持当前访问会话。
  • Referer:用于标识请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理。
  • User-Agent:简称UA,这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。做爬虫时如果加上此信息,可以伪装成浏览器。
  • Content-Type:也叫做互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。

4.请求体

​ 请求体,一般承载的内容是POST请求中的表单数据,对于GET请求,请求体为空。

​ 例如,登录百度时捕获到的请求和响应如图1-1-4所示。

《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理,网络爬虫开发实战学习笔记,爬虫,学习,笔记

图1-1-4 详细信息

​ 登录之前,需要先填写用户名和密码信息,登录时这些内容会以表单数据的形式提交给服务器,此时需要注意Request Headers中指定Content-Type为application/x-www-form-urlencoded。只有这样设置Content-Type,内容才会以表单数据的形式提交。另外,也可以将Content-Type设置为application/json来提交json数据,或者设置为multipart/form-data来上传文件。

​ 表1-1-2列出了Content-Type和POST提交数据方式的关系。

表1-1-2 Content-Type和POST提交数据方式的关系
Content-Type POST提交数据的方式
application/x-www-form-urlencoded 表单数据
multipart/form-data 表单文件上传
application/json 序列化JSON数据
text/xml XML数据

​ 在爬虫中,构造POST请求需要使用正确的Content-Type,并了解设置各种请求库的各个参数时使用的都是哪种Content-Type,否则可能会导致POST提交后无法得到正常响应。

5.响应

​ 响应,即Response,由服务器返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)。

  • 响应状态码

​ 响应状态码,表示服务器的响应状态。在爬虫中,我们可以根据状态码判断服务器的响应状态,表1-1-3列出了常见的状态码和对应含义。

表1-1-3 常见的状态码和对应含义
状态码 说明 详情
100 继续 请求者应当继续提出请求。服务器已接收到请求的一部分,正在等待其余部分
101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换
200 成功 服务器已成功处理了请求
201 已创建 请求成功并且服务器创建了新的资源
202 已接收 服务器已接收请求,但尚未处理
203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一个源
204 无内容 服务器成功处理了请求,但没有返回任何内容
205 重置内容 服务器成功处理了请求,内容被重置
206 部分内容 服务器成功处理了部分请求
300 多种选择 针对请求,服务器可执行多种操作
301 永久移动 请求的网页已永久移动到新位置,即永久重定向
302 临时移动 请求的网页暂时跳转到其他页面,即暂时重定向
303 查看其他位置 如果原来的请求是POST,重定向目标文档应该通过GET提取
304 未修改 此次请求返回的网页未经修改,继续使用上次的资源
305 使用代理 请求者应该使用代理访问该网页
307 临时重定向 临时从其他位置响应请求的资源
400 错误请求 服务器无法解析该请求
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝此请求
404 未找到 服务器找不到请求的网页
405 方法禁用 服务器禁用了请求中指定的方法
406 不接收 无法使用请求的内容响应请求的网页
407 需要代理授权 请求者需要使用代理授权
408 请求超时 服务器请求超时
409 冲突 服务器在完成请求时发生冲突
410 已删除 请求的资源已永久删除
411 需要有效长度 服务器不接收不含有效内容长度标头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的某一个前提条件
413 请求实体过大 请求实体过大,超出服务器的处理能力
414 请求URI过长 请求网址过长,服务器无法处理
415 不支持类型 请求格式不被请求页面支持
416 请求范围不符 页面无法提供请求的范围
417 未满足期望值 服务器未满足期望请求标头字段的要求
500 服务器内部错误 服务器遇到错误,无法完成请求
501 未实现 服务器不具备完成请求的能力
502 错误网关 服务器作为网关或代理,接收到上游服务器的无效响应
503 服务不可用 服务器目前无法使用
504 网关超时 服务器作为网关或代理,没有及时从上游服务器接收到请求
505 HTTP版本不支持 服务器不支持请求中使用的HTTP协议版本
  • 响应头

​ 响应头,包含了服务器对请求的应答信息,下面简要说明一些常用的响应头信息。

  1. Date:用于标识响应产生的时间。
  2. Last-Modified:用于指定资源的最后修改时间。
  3. Content-Encoding:用于指定响应内容的编码。
  4. Server:包含服务器的信息。
  5. Content-Type:文档类型,指定返回的数据是什么类型。
  6. Set-Cookie:设置Cookie,告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上。
  7. Expires:用于指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中。当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载、缩短加载时间的目的。
  • 响应体

​ 响应体,可以说是最关键的部分,相应的正文都存在于响应体中。爬虫请求网页时,要解析的内容就是响应体,如图1-1-5所示。

《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理,网络爬虫开发实战学习笔记,爬虫,学习,笔记

图1-1-5 响应体内容

​ 在浏览器开发者工具中点击响应,就可以看到网页的源代码,也就是响应体的内容,这是爬虫的解析目标。在做爬虫时,我们主要通过响应体得到网页的源代码、JSON数据等,然后从中提取相应内容。文章来源地址https://www.toymoban.com/news/detail-774321.html

到了这里,关于《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 〖Python网络爬虫实战㉜〗- 协程基本原理

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明 作者

    2024年02月16日
    浏览(30)
  • 〖Python网络爬虫实战④〗- 代理的基本原理

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2023年04月08日
    浏览(29)
  • 〖Python网络爬虫实战㉝〗- aiohttp 的基本使用

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+ python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明 作者:爱吃饼干的小白鼠。Python领域优质创作者,20

    2024年02月13日
    浏览(28)
  • HTTP/1.1、HTTP/2、HTTP/3 基本概述

    参考链接 https://xiaolincoding.com/network/2_http/http_interview.html#http-1-1-%E7%9B%B8%E6%AF%94-http-1-0-%E6%8F%90%E9%AB%98%E4%BA%86%E4%BB%80%E4%B9%88%E6%80%A7%E8%83%BD HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。 支持管道(pipeline)网络传输,只要第一个请求发

    2024年01月25日
    浏览(36)
  • 〖Python网络爬虫实战⑨〗- 正则表达式基本原理

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                  python项目实战                 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2023年04月15日
    浏览(76)
  • Python3网络爬虫开发实战

    1.1 URI和URL URI:统一资源标识符(Uniform Resource Identifier) URL:统一资源定位符(Uniform Resource Locator) URN:统一资源名称(Uniform Resource Name) 1.2 HTTP和HTTPS HTTP:超文本传输协议(Hypertext Transfer Protocol) HTTPS:以安全为目标的HTTP通道(Hypertext Transfer Protocol) 1.3 请求(Requset) 1.3.1 请求方式 函数

    2024年02月04日
    浏览(33)
  • 【Python爬虫开发基础⑥】计算机网络基础(Web和HTTP)

    专栏 :python网络爬虫从基础到实战 欢迎订阅!近期还会不断更新~ 另外 :如果想要看更多的计算机网络知识,可以关注我的专栏:计算机网络 往期推荐 : 【Python爬虫开发基础①】Python基础(变量及其命名规范) 【Python爬虫开发基础②】Python基础(正则表达式) 【Python爬虫

    2024年02月12日
    浏览(40)
  • HTTP/1.1 特性(计算机网络)

    HTTP/1.1 的优点有哪些? 「简单、灵活和易于扩展、应用广泛和跨平台」 1. 简单 HTTP 基本的报文格式就是  header + body ,头部信息也是  key-value  简单文本的形式, 易于理解 。 2. 灵活和易于扩展 HTTP 协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固

    2024年04月28日
    浏览(20)
  • 网络爬虫开发(五)01-爬虫高级——Selenium简介 & 根据平台选择安装selenium-webdriver包 & Selenium的基本使用

    网络爬虫开发(五)01-爬虫高级——Selenium简介 根据平台选择安装selenium-webdriver包 Selenium的基本使用 学习目标: 使用Selenium库爬取前端渲染的网页 反反爬虫技术 官方原文介绍: Selenium automates browsers . That’s it! What you do with that power is entirely up to you. Primarily, it is for automating web

    2024年01月24日
    浏览(26)
  • Python3 网络爬虫开发实战 第2版 (崔庆才) PDF 高清

    《Python 3 网络爬虫开发实战(第二版)》是由崔庆才所著的一本关于使用 Python 进行网络爬虫开发的书籍。 网络爬虫基础:介绍网络爬虫的基本概念、工作原理和常见的应用场景。 HTTP 协议与 Scrapy 框架:解释 HTTP 协议的基本知识,以及如何使用 Scrapy 框架来构建和管理爬虫项

    2024年04月09日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包