网络爬虫——HTTP和HTTPS的请求与响应原理

news2024/11/16 16:44:34

目录

一、HTTP的请求与响应

二、浏览器发送HTTP请求的过程

三、HTTP请求方法

四、查看网页请求

五、常用的请求报头

六、服务端HTTP响应

七、常用的响应报头

八、Cookie 和 Session

九、响应状态码

十、网页的两种加载方法

十一、认识网页源码的构成

十二、爬虫协议


在如今这个数据驱动的时代,网络爬虫在数据采集、信息抓取和处理等方面发挥着越来越重要的作用。为了更好地理解和应用网络爬虫,我们需要深入了解HTTP和HTTPS的请求与响应原理。本文将带领大家探讨这些基本原理,带您领略网络爬虫的魅力。

一、HTTP的请求与响应

HTTP,全称Hypertext Transfer Protocol,即超文本传输协议,是一种应用层协议,用于在网络中传输超文本(例如网页)。HTTP请求和响应是HTTP协议的基本组成单元。

HTTP请求由请求行、请求头部和请求正文组成。请求行包括请求方法、请求的资源路径和HTTP协议版本。请求方法包括GET、POST、PUT、DELETE等。请求头部包含了一些关于请求的元数据,例如请求来源、内容类型等。请求正文则包含了要发送给服务器的数据。

HTTP响应由响应行、响应头部和响应正文组成。响应行包括HTTP协议版本、状态码和原因短语。响应头部包含了一些关于响应的元数据,例如内容类型、字符集等。响应正文则包含了服务器返回给客户端的数据。

二、浏览器发送HTTP请求的过程

当我们访问一个网页时,浏览器会根据我们需要获取的资源地址生成一个HTTP请求,并将该请求发送给服务器。服务器在收到请求后,会进行处理并返回相应的HTTP响应。

具体而言,当我们输入一个URL后,浏览器会进行以下步骤:

  1. 解析URL,得到协议类型(http或https)、主机名、端口号和资源路径等信息;
  2. 根据协议类型选择相应的网络库,如HttpURLConnection、HttpClient等;
  3. 按照HTTP协议格式组装请求报文,包括请求行、请求头部和请求正文;
  4. 通过网络库发送请求报文;
  5. 接收服务器返回的HTTP响应报文,并解析出响应行、响应头部和响应正文;
  6. 根据响应头部的内容类型进行相应的处理,如解析HTML、处理JSON等;
  7. 将最终的响应结果展示在浏览器界面上。

三、HTTP请求方法

HTTP请求方法是指用来向服务器发送请求的动作类型。目前,HTTP协议主要支持GET、POST、PUT、DELETE等几种方法。

GET方法是最常用的请求方法之一,它用于从服务器获取特定资源的信息。GET请求将请求参数附加在URL的末尾,以“?”符号分隔,如http://example.com/search?keyword=apple&page=1。

POST方法则用于向服务器发送数据。它通过在请求正文中包含要发送的数据来进行通信。POST请求常用于表单提交、上传文件等操作。

四、查看网页请求

在浏览器中查看HTTP请求报文需要使用一些开发者工具。常见的浏览器(如Chrome、Firefox)都提供了内置的开发者工具,其中包含了网络面板,可以用来查看和分析HTTP请求和响应报文。

以Chrome浏览器为例,打开开发者工具的步骤是:右键点击页面中的任意位置选择“检查”,或者使用快捷键F12打开开发者工具。在开发者工具的顶部菜单中选择“Network”选项卡,然后刷新页面即可看到所有的HTTP请求和响应报文。

五、常用的请求报头

HTTP请求头部包含了关于请求的元数据信息,这些信息对于客户端和服务端进行沟通协作至关重要。以下是一些常用的HTTP请求头部:

  1. User-Agent:用于指定客户端所使用的操作系统、浏览器和其他相关信息。例如,User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3。
  2. Referer:用于指示请求来源,即告诉服务器该请求是从哪个页面或链接过来的。例如,Referer: Example Domain。
  3. Cookie:用于保存用户在多个请求之间的状态信息,例如登录信息、个性化设置等。例如,Cookie: username=john_doe; session_id=abcdefg。
  4. Host:用于指定请求的目标服务器的主机名和端口号。例如,Host: http://www.example.com:80。
  5. Accept:用于告诉服务器客户端能够处理哪些类型的内容。例如,Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8。

六、服务端HTTP响应

服务端HTTP响应是指服务器对客户端请求的响应。响应报文包括响应行、响应头部和响应正文。

响应行包含HTTP协议版本、状态码和原因短语。状态码表示请求的处理结果,如200表示成功,404表示未找到资源,500表示服务器内部错误等。

响应头部包含了一些关于响应的元数据,如内容类型、字符集、响应时间等。响应正文则包含了服务器返回给客户端的数据,例如HTML、JSON或其他格式的数据。

七、常用的响应报头

以下是一些常用的HTTP响应头部:

  1. Content-Type:用于指定响应正文的内容类型。例如,Content-Type: text/html; charset=utf-8。
  2. Content-Length:用于指示响应正文的长度。例如,Content-Length: 12345。
  3. Set-Cookie:用于在客户端存储服务器特定的状态信息。例如,Set-Cookie: session_id=abcdefg。
  4. Location:用于指示重定向的URL地址。例如,Location: Example Domain。
  5. Expires:用于指示响应过期的日期和时间。例如,Expires: Wed, 21 Jul 2023 10:00:00 GMT。
  6. Cache-Control:用于控制客户端如何缓存响应并对其进行重用。例如,Cache-Control: no-cache, no-store, must-revalidate。

八、Cookie 和 Session

Cookie和Session都是为了维护用户状态而产生的技术。

Cookie是在客户端(浏览器)上存储用户状态信息的一种方式。当用户访问网站时,服务器会在响应报文中加入一个或多个Cookie,这些Cookie包含了标识用户身份的信息,如用户名、登录状态等。当用户再次访问该网站时,浏览器会将存储的Cookie信息发送给服务器,以帮助服务器识别用户身份,并进行个性化推荐、登录验证等操作。

Session是在服务器端存储用户状态信息的一种方式。当用户首次访问网站并登录时,服务器会在客户端生成一个唯一的Session ID,并将其发送给客户端(通常通过Cookie)。当用户再次访问该网站时,浏览器会将存储的Session ID发送给服务器,以帮助服务器识别用户身份,并恢复用户的会话状态。与Cookie不同,Session的信息存储在服务器端,因此可以存储更敏感的信息,并且可以跨多个浏览器使用。

九、响应状态码

HTTP响应状态码是由服务器返回给客户端的数字代码,用于表示请求的处理结果。以下是一些常见的HTTP响应状态码:

  1. 200 OK:请求成功。
  2. 301 Moved Permanently:请求的资源永久性转移到其他URL。
  3. 302 Found:请求的资源临时性转移到其他URL。
  4. 304 Not Modified:客户端缓存的资源未被修改,可直接使用缓存资源。
  5. 403 Forbidden:禁止访问请求的资源。
  6. 404 Not Found:请求的资源未找到。
  7. 500 Internal Server Error:服务器内部错误导致无法完成请求。
  8. 503 Service Unavailable:服务器暂时无法处理请求(通常用于维护或升级期间)。

十、网页的两种加载方法

网页的加载方法主要分为两种:同步加载和异步加载。

  1. 同步加载:当浏览器请求一个网页时,会按照HTML文档的结构顺序加载每个元素。在加载过程中,浏览器会等待每个元素加载完成后再加载下一个元素。这种方式需要等到所有元素都加载完毕后才能展示整个网页,因此加载速度较慢。
  2. 异步加载:随着Web技术的发展,为了提高网页的加载速度和用户体验,出现了异步加载技术。异步加载是指当浏览器请求一个网页时,会先加载HTML文档的结构,然后再通过JavaScript等技术异步加载其他元素。这种方式不需要等待所有元素都加载完成后再展示整个网页,因此加载速度较快。

常见的异步加载技术包括AJAX(Asynchronous JavaScript and XML)、Fetch API、axios等。

十一、认识网页源码的构成

网页源码是由HTML、CSS和JavaScript等语言编写的文本文件,用于构建和设计网页的内容、样式和交互。

  1. HTML(HyperText Markup Language):HTML是网页的基础,用于创建网页的结构和内容。它使用一系列标记来描述文本、链接、图片等元素,使得浏览器能够正确地解析和展示网页。
  2. CSS(Cascading Style Sheets):CSS用于控制网页的样式,包括字体、颜色、布局等。它可以让网页看起来更加美观、易于阅读和使用。CSS可以通过内联样式、内部样式表和外部样式表等方式来定义和应用。
  3. JavaScript:JavaScript是一种脚本语言,用于实现网页的交互功能,如响应用户的点击、提交表单等操作。它可以让网页变得更加生动有趣,提升用户体验。JavaScript通常嵌入在HTML文档中,也可以通过外部文件引入。

除了以上三种基本的网页构成元素之外,网页源码还可能包含其他内容,如图片、视频等多媒体元素,以及服务器端脚本语言(如PHP、Java等)生成的动态内容等。

十二、爬虫协议

爬虫协议是指网络爬虫在抓取网页内容时需要遵循的一些规范和协议,以确保合理、合法、道德地获取数据。以下是一些常见的爬虫协议:

以上这些爬虫协议都是在爬取网页内容时需要遵守的基本规范。在编写网络爬虫时,需要遵循这些协议,以避免对目标网站造成不必要的干扰或伤害。同时,也需要了解各种爬虫协议之间的差异,以便更好地理解和处理不同格式的数据。

  1. Robots.txt协议:Robots.txt文件是一个文本文件,它告诉爬虫哪些页面可以抓取,哪些页面不能抓取,以及爬虫的访问方式。大多数网站都会提供一个Robots.txt文件来指导爬虫的行为。
  2. Robots Exclusion Protocol(REP):REP是一种更加灵活的爬虫协议,它可以通过HTTP头部的User-agent字段来告诉爬虫哪些页面可以抓取,哪些页面不能抓取。
  3. Common Crawl Data Format(CCDF):CCDF是一种公开的数据格式,它用于规范化和描述网络爬虫所抓取的数据。任何人都可以使用CCDF来分享自己爬取的数据,也可以使用CCDF来解析其他爬虫所爬取的数据。
  4. Portable Document Format (PDF):虽然PDF不是一种爬虫协议,但是PDF文件经常被用于展示网页内容,特别是在学术论文和报告等领域。在爬取网页内容时,需要识别和处理PDF文件。
  5. JSON/XML/Atom/RSS Feeds:这些数据格式通常不是爬虫协议,但是它们经常被用于提供API接口或者提供数据服务。在爬取网页内容时,需要识别和处理这些数据格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOTE 2023盛况回顾,美格智能聚连接之力促数字新生长

9月20~22日,IOTE国际物联网展深圳站在深圳国际会展中心正式召开。本届展会以“IoT构建数字经济底座”为主题,聚焦物联网技术助推数字经济发展的核心动力。美格智能携前沿技术成果亮相展会,与参展观众深入交流。 展会上,美格智能带…

Docker - 使用 Dockerfile 封装已有的 Docker Image

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/133170855 Dockerfile 是用来构建 Docker 镜像的文本文件,包含了一系列的指令和说明,用于描述如何从一个基础镜像开始&…

2023华为杯数学建模D题——碳排放路径优化基于指数分解法的LMDI 模型

LMDI 模型是基于指数分解法(IDA) 发展而成的一种因素分解法。LMDI模型在 Kaya 拓展式的基础上, 利用对数平均法对影响因素进行分析。 综合比较其他的指数分解方法, LMDI 分解法有着可完全分解因子、 无残差项等优势。根据对 Kaya …

Mysql数据库管理用户

Mysql数据库管理用户 一、管理用户1.1、用户创建1.2、 查看用户信息1.3 、重命名用户1.4、 删除用户1.5、 修改当前登录用户密码1.6、修改其他用户密码1.7、 忘记密码的解决办法 二、数据库用户授权2.1、 权限的授予2.2、 查看权限2.3、 撤销用户权限 一、管理用户 1.1、用户创…

搭建自己的搜索引擎之一

一、前言 关于搜索引擎自己接触的还算是比较多的,先简单回忆一下以前做过的事情,以前工作没有什么文档沉淀下来很多事情几乎都快忘差不多了,挺遗憾的。 1、10几年前在东奇软件做企业网站时玩过Lucene,当时中文分词还很弱&#xf…

ant design Pro中 initialState的使用方法

前言: initialState可以实现全局数据共享 基本使用: 在 umi 的运行时配置 src/app.tsx 中添加运行时配置 getInitialState ,该配置是一个 async 的 function,示例如下: export async function getInitialState() {…

Crazy Excel:Excel中的泥石流

Crazy Excel又名:疯狂Excel。是一款PC端的Excel软件工具,该软件支持windows, mac os等主流操作系统。 正如其名,作者在设计之初就加入了一些疯狂的设计,目的是创作出更加好用有效的excel工具。 不管是专业还是小白,…

【校招VIP】产品逻辑考察之优先级

考点介绍: 如何定义需求的优先级是考察产品经理能力的方法之一。 定义产品需求的优先级是非常关键的,不然团队会不知道各项事务的轻重缓急,资源和精力都无法集中在最重要的目标上。 产品逻辑考察之优先级-相关题目及解析内容可点击文章末尾链…

TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案

一、方案背景 随着人工智能技术的快速发展以及视频监控系统在全国范围内的迅速推进,基于AI视频智能分析技术的智能视频监控与智慧监管系统,也已经成为当前行业的发展趋势。在工业制造与工业生产领域,工厂对设备的巡检管理、维护维修、资产管…

Spring Cloud Gateway快速入门(四)——gateway最最重要的功能!Gateway如何实现的服务匹配

文章目录 前言为什么要使用gateway进行服务的分配集中化的路由管理:动态路由的支持:请求过滤和处理:高性能和高可靠性: 1. 介绍2. 服务匹配的概念2.1 路由规则2.1.1 Predicate(断言)2.1.2 Filter&#xff0…

GC8837国产驱动芯片,可以替代TI的DRV8837C,具有 PWM(IN/IN)输入接口, 与行业标准器件兼容,并具有过温保护功能。

GC8837 是一款 12V 直流电机驱动芯片, 为摄像机、消费类产品、玩具和其他低压或 者电池供电的运动控制类应用提供了集成的 电机驱动解决方案。芯片一般用了驱动一个 直流电机或者使用两颗来驱动步进电机。可以工作在 0~12V 的电源电压 上,能提供高达 1.5…

OpenCV之油画特效

源码: # 读取图片 img cv2.imread("d:/img.jpg", 1) height, width, channels img.shape# 灰度图 gray_img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 将图像分为8x8的多个小块,并统计小块每个像素的灰度值 # 划分灰度等级,例如…

手写实现简易Spring框架

该文章记录的是自己实现简易Spring框架的记录,简化了源码中的大量操作,没有实现三级缓存的机制。 其中将会对Component,ComponentScan,Scope,Autowired注解。BeanDefinition类以及ApplicationContext、BeanPostProcess…

C++中的 throw详解

在《C++异常处理》一节中,我们讲到了 C++ 异常处理的流程,具体为: 抛出(Throw)--> 检测(Try) --> 捕获(Catch) 异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。在 C++ 中,我们使用 throw 关键字来显式地抛出异常,它的用…

【GAMES103】基于物理的计算机动画入门(1)前置的基础数学知识

GAMES103: 基于物理的计算机动画入门 链接:GAMES103 1. 坐标系的划分 在游戏引擎中分为右手和左手坐标系,区分的依据是什么? 上图可以看到如果是左手坐标系,那么所有的物体都在屏幕后面,意味着x,y&#x…

【Linux 之二】Ubuntu下开发环境的搭建(NFS \ SSH \ FTP \ Smba \ ...)

目前正在进行Linux相关项目的开发,而我的Linux开发是在Ubuntu(版本20.04)下进行的,为此需要搭建很多Linux相关的开发环境,方便工作的进行。这里主要是对各种开发环境的搭建做一个总结记录,方便后面查阅&…

彻底解决win11系统0x80070032

经过各种尝试,终于找到原因。第一个是电脑加密软件,第二个是需要的部分功能没有开启,第三个BIOS设置。个人觉得第三个不重要。 解决方法 笔记本型号 笔记本型号是Thinkpad T14 gen2。进入BIOS的按键是按住Enter键。 1、关闭山丽防水墙服务…

AI AIgents时代 - (四.) HuggingGPT MetaGPT

🟢 HuggingGPT HuggingGPT是一个多模型调用的 Agent 框架,利用 ChatGPT 作为任务规划器,根据每个模型的描述来选择 HuggingFace 平台上可用的模型,最后根据模型的执行结果生成总结性的响应。 这个项目目前已在 Github 上开源&am…

【暴力DP】CF1409 F

Problem - F - Codeforces 题意: 思路: 首先有个很明显的结论是:替换的字符一定是那两个字符之一 那么替换成哪个字符贡献更大不确定,因此考虑DP 因为有操作次数限制,直接把操作放进状态里 为了计算贡献&#xff…

Go语言高级特性解析与实践

1. 并发模型与goroutine Go语言以其强大的并发模型而闻名,它的核心机制是goroutine。goroutine是一种轻量级线程,由Go运行时负责调度。我们可以通过go关键字创建goroutine,而不需要像传统的线程编程那样关注底层的线程管理。 示例代码&…