当前位置: 首页 > news >正文

Python3爬虫教程-HTTP基本原理

HTTP基本原理

  • 1,URL组成部分详解
  • 2,HTTP和HTTPS
  • 3,HTTP请求过程
  • 4,请求(Request)
    • 请求方法(Request Method)
    • 请求的网址(Request URL)
    • 请求头(Request Headers)
    • 请求体(Request Body)
  • 5、响应(Response)
    • 响应状态码(Response Status Code)
    • 响应体(Response Body)
  • 6、HTTP/2.0
    • 二进制分帧层
    • 多路复用
    • 流量控制
    • 服务端推送

1,URL组成部分详解

URL是uniform Resource Locator的简写,统一资源定位符
一个URL由以下几部分组成:
在这里插入图片描述

  • scheme:代表的是访问的协议,一般为http或https以及ftp等
  • host:主机名,域名,比如www.baidu.com
  • port:端口号,http协议是80端口,https协议是443端口
  • path:查找路径。比如:www.baidu.com/trending/now,后面的trending/now就是path
  • query-string:查询字符串,用来传参。比如:www.baidu.com/s?wd=python&a=1,后面的wd=python和a=1就是查询字符串
  • anchor:锚点,后台一般不用管。前端用来做页面定位

2,HTTP和HTTPS

  • HTTP:全称是Hyper Text Transfer Protocol,中文名叫做超文本传输协议;HTTP协议是从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。
  • HTTPS:全称是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单将是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。

3,HTTP请求过程

我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容。解析这个过程

  • 1,浏览器向网站所在的服务器****发送了一个请求;网页服务器****接收到这个请求后进行处理和解析;服务器返回对应的响应接着传回给浏览器;浏览器对返回的响应进行解析(相应中包含页面的源代码等内容,所以需解析);网页呈现
    在这里插入图片描述
  • 2, Chrome 浏览器开发者模式下的 Network 监听组件
    • Name:请求的名称,一般会将 URL 的最后一部分内容当作名称。
    • Status:响应的状态码,这里显示为 200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
    • Type:请求的文档类型。这里为 document,代表我们这次请求的是一个 HTML 文档,内容就是一些 HTML 代码。
    • Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
    • Size:从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache。
    • Time:发起请求到获取响应所用的总时间。
      在这里插入图片描述

4,请求(Request)

  • 请求:客户端向服务器发出,可以分为4个部分:
    • 请求方法(Request Method)
    • 请求网址(Request URL)
    • 请求头(Request Headers)
    • 请求体(Request Body)

请求方法(Request Method)

  • 请求方法:用于标识请求客户端请求服务端的方式,常见的请求方式有两种:GET和POST
    • GET请求中的参数包含在URL里面,数据可以在URL中看到,也就是Query信息部分;而POST请求的URL不回包含这些数据,数据都是通过表单形式传输的,会包含在请求体中,
    • GET请求提交的数据最多只有1024字节,而POST方式没有限制
  • 其他请求方法:
    • HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
    • PUT 从客户端向服务器传送的数据取代指定文档中的内容
    • DELETE 请求服务器删除指定的页面
    • CONNECT 把服务器当作跳板,让服务器代替客户端访问其他网页
    • OPTIONS 允许客户端查看服务器的性能
    • TRACE 回显服务器收到的请求,主要用于测试或诊断

请求的网址(Request URL)

  • 请求的网址可以唯一确定我们想请求的资源,关于URL的构成解析如上

请求头(Request Headers)

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

请求体(Request Body)

  • 请求体一般承载的内容是是POST请求中的表单数据,而对于GET请求,请求体为空。
  • Content-Type 和 POST 提交数据方式的关系:
    在这里插入图片描述

5、响应(Response)

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

响应状态码(Response Status Code)

  • 相应状态码:表示服务器的响应状态,如200代表服务器正常相应;404代表页面未找到;500代表服务器内部发生错误。我们可以根据状态码来判断服务器响应状态
  • 常见的错误代码及错误原因
    在这里插入图片描述
    在这里插入图片描述

响应体(Response Body)

  • 响应体:最关键的部分,相应的正文数据都在响应体中。比如请求网页时,它的响应体就是网页的 HTML 代码;请求一张图片时,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体。
  • 在做爬虫时,我们主要通过响应体得到网页的源代码、JSON 数据等,然后从中做相应内容的提取。

6、HTTP/2.0

  • HTTP/2.0 在内部实现上新的二进制分帧层,这是没法与之前的 HTTP/1.x 的服务器和客户端实现向后兼容的,所以直接修改了主版本号为 2.0。

二进制分帧层

  • HTTP/2.0 所有性能增强的核心就在于这个新的二进制分帧层。HTTP/2.0 做了优化,将文本格式修改为了二进制格式,使得解析起来更加高效。同时将请求和响应数据分割为更小的帧,并采用二进制编码。

多路复用

  • 在 HTTP/2.0 中,由于又了二进制分帧技术的加持,HTTP/2.0 不用再以来 TCP 连接去实现多路并行了,客户端和服务器可以将 HTTP 消息分解为互不依赖的帧,然后交错发送,最后再在另一端把它们重新组装起来

流量控制

  • 流量控制是一种阻止发送方向接收方发送大量数据的机制,以免超出后者的需求或处理能力。可以理解为,接收方已经太繁忙了,来不及处理收到的消息了,但是发送方还在一直大量发送消息,这样就会出现一些问题。

服务端推送

HTTP/2.0 新增的另一个强大的新功能是,服务器可以对一个客户端请求发送多个响应。 换句话说,除了对最初请求的响应外,服务器还可以向客户端推送额外资源,而无需客户端明确地请求。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【MySQL】基础入门篇
  • [WMCTF2020]Make PHP Great Again 2.01
  • s3c2440——ADC模数转换器,Linux驱动编程——u-boot
  • go webapi上传文件
  • centos7安装Redis单机版
  • PySimpleGUI:简化 Python 中的 GUI 开发
  • uniapp实现在表单中展示多个选项,并且用户可以选择其中的一个或多个选项
  • ARM/Linux嵌入式面经(三九):中科驭数
  • 89个H5小游戏源码
  • 大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元
  • python爬虫bs4库的用法
  • SpringBoot集成阿里easyexcel(一)基础导入导出
  • 2025考研倒计时 考研时间公布了 你准备好复习冲刺了吗?
  • 直播平台美颜功能开发方案:基于视频美颜SDK的集成详解
  • Java接口和抽象类的区别
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • classpath对获取配置文件的影响
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • If…else
  • js继承的实现方法
  • laravel5.5 视图共享数据
  • leetcode98. Validate Binary Search Tree
  • Node + FFmpeg 实现Canvas动画导出视频
  • Redux系列x:源码分析
  • TCP拥塞控制
  • yii2权限控制rbac之rule详细讲解
  • 初识 webpack
  • - 概述 - 《设计模式(极简c++版)》
  • 那些年我们用过的显示性能指标
  • 收藏好这篇,别再只说“数据劫持”了
  • 思考 CSS 架构
  • 一个JAVA程序员成长之路分享
  • - 转 Ext2.0 form使用实例
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 阿里云移动端播放器高级功能介绍
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #{}和${}的区别是什么 -- java面试
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)leetcode 234.回文链表 141.环形链表
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)scrum常见工具列表
  • (转)Sublime Text3配置Lua运行环境
  • (转)VC++中ondraw在什么时候调用的
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .gitignore文件—git忽略文件
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core 项目指定SDK版本