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

目录

一、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.mzph.cn/news/85308.shtml

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

相关文章

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

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

LeetCode【69. x 的平方根】

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1&#xff1…

FPGA原理与结构(0)——目录与传送门

一、 简介 FPGA的设计和软件设计不同,我们所设计的RTL代码最终还是要落实到硬件底层来进行实例化,因此理解硬件底层的内容是很有意义的。 二、可编程逻辑块CLB 可配置逻辑块CLB(Configurable Logic Block)是xilinx系类FPGA的基本…

操作系统--------调度算法篇

目录 一.先来先服务调度算法(FCFS) 二.短作业优先调度算法(SJF) 2.1.SJF调度算法缺点 三.优先级调度算法 3.1优先级调度算法的类型 1.非抢占优先级调度算法 2.抢占优先级调度算法 3.2优先级的类型 3.1静态优先级 3.2动态…

肖sir__mysql之存储练习题__013

实验 一、 实验要求: 理解存储过程的概念掌握存储过程的语法格式、使用方法掌握存 储过程的创建、执行 二、实验前提: – drop table if exists student; – Create table student – (Id varchar(255), #学号 – Name varchar(255), #姓名 – Roomid…

生成式模型和判别式模型区别

目录 1.概念 2.定义​ 3.举例​ (1)例子 A​ (2)例子 B​ 4.特点 5.优缺点 6.代表算法 1.概念 首先我们需要明确,两种不同的模型都用于监督学习任务中。监督学习的任务就是从数据中学习一个模型,并用…

golang优先级坑

看如下代码,我本以为a1, a2是相同的 package mainimport "fmt"func main() {b, c, d : 1, 0, 1a1 : b ^ c&(^d) // 1 ^a2 : c ^ b&(^d) // 0 ^fmt.Println(a1, a2) // 1 0 }但结果却是不同的,在golang中&的优先级^和|…

使用 PyTorch 的计算机视觉简介 (1/6)

一、说明 Computer Vision(CV)是一个研究计算机如何从数字图像和/或视频中获得一定程度的理解的领域。理解这个定义具有相当广泛的含义 - 它可以从能够区分图片上的猫和狗,到更复杂的任务,例如用自然语言描述图像。 二、CV常见的问…

RocketMQ高性能核心原理与源码架构剖析

文章目录 1、源码环境搭建1.1、主要功能模块1.2、源码启动服务1.2.1、 启动nameServer1.2.2、 启动Broker1.2.3、 发送消息1.2.4、 消费消息 2、源码剖析2.1、NameServer的启动过程2.2、Broker服务启动过程2.3、Netty服务注册框架2.3.1、关注重点2.3.2、源码重点 1、源码环境搭…

AJAX学习

文章目录 创建 XMLHttpRequest 对象向服务器发送请求XMLHttpRequest.open()XMLHttpRequest.send()GET或POST 服务器响应XMLHttpRequest 的属性XMLHttpRequest.readyStateXMLHttpRequest.onreadystatechangeXMLHttpRequest.responseXMLHttpRequest.responseTypeXMLHttpRequest.r…

OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(7)聊天机器人 / ChatBot

聊天机器人 / ChatBot 使用大型语言模型来构建你的自定义聊天机器人 在本视频中,你将学习使用OpenAI ChatCompletions格式的组件构建一个机器人。 环境准备 首先,我们将像往常一样设置OpenAI Python包。 import os import openai from dotenv import…

ruoyi框架修改左侧菜单样式

菜单效果 ruoyi前端框架左侧的菜单很丑,我们需要修改一下样式,下面直接看效果。 修改代码 1、sidebar.scss .el-menu-item, .el-submenu__title {overflow: hidden !important;text-overflow: ellipsis !important;white-space: nowrap !important;//…

vue3——pixi初学,编写一个简单的小游戏,复制粘贴可用学习

pixi官网 小游戏效果 两个文件夹 一个index.html 一个data.js //data.js import { reactive } from "vue"; import { Sprite, utils, Rectangle, Application, Text, Graphics } from "pixi.js";//首先 先创建一个舞台 export const app new Applicat…

QT配置MySQL数据库 ninja: build stopped: subcommand failed

QT配置MySQL数据库 我当前的软件版本:QT Creator 10.0.2 (community),MingW 6.4.3 (QT6),MySQL 8.0。 MySQL不配置支持的数据库有QList("QSQLITE", "QODBC", "QPSQL"),这个时候是不支持MYSQL数据…

[极客大挑战 2019]RCE ME 取反绕过正则匹配 绕过disable_function设置

目录 取反 1.蚁剑插件绕过 2.baypass disable_function open_dir/disable_function putenv()/LD_PRELOAD 来绕过限制 利用条件 利用思路 有意思。。。。 <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("Th…

windbg -I之后如何恢复原有的

直接运行了一下windbg -I&#xff0c;抓取了注册表行为&#xff0c;然后这里记录一下&#xff0c;方便翻阅。 抓取到的windbg的注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger 将值改为 "C:\WINDOWS\system32\vsji…

git 本地工作区和仓库区基本使用

(1)git 本地有三个区 工作区和暂存区和 git管理的仓库. &#xff08;自行动手实践理解,然后就入门了&#xff09;(2)本地初次使用git做的事情,需要做如下工作 git config --global user.name "xx" git config --global user.email xxxqq.com git config --globa…

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

编写第一个Go程序

编写第一个Go程序 1. 开发环境构建 在Go语言中&#xff0c;开发环境的构建需要设置GOPATH环境变量。在1.8版本之前&#xff0c;必须显式设置GOPATH环境变量。而在1.8版本及之后&#xff0c;如果没有设置GOPATH&#xff0c;Go将使用默认值。 在Unix系统上&#xff0c;默认值为…

基于YOLOv8模型的条形码二维码检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的条形码二维码检测系统可用于日常生活中检测与定位条形码与二维码目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测…