网络爬虫——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.xdnf.cn/news/139084.html

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

相关文章

【大数据开发技术】实验04-HDFS文件创建与写入

文章目录 一、实验目标二、实验要求三、实验内容四、实验步骤 一、实验目标 熟练掌握hadoop操作指令及HDFS命令行接口掌握HDFS原理熟练掌握HDFS的API使用方法掌握单个本地文件写入到HDFS文件的方法掌握多个本地文件批量写入到HDFS文件的方法 二、实验要求 给出主要实验步骤成…

uniapp——ios证书申请——详细步骤+遇到的坑——技能提升

三年前,我曾经写过uniapp的程序,时隔三年,又遇到了uniapp的需求,之前没有自行申请ios证书,现在终于要自己生成证书了。。。 是福不是祸,是祸躲不过。 uniapp生成ios证书的详细步骤 uniapp对接unipush的操作…

buuctf web [ACTF2020 新生赛]Upload

明了但不明显的文件上传 传个试试 行,抓包吧,php格式不行,就先上传要求的格式:jpg、png、gif 抓到上传的包之后,再修改成我们想要的 常见的php格式绕过有:php,php3,php4,php5,phtml,pht 挨个试试 这是上个…

第九章 常用服务器的搭建

第九章 常用服务器的搭建 1.配置FTP服务器 1.1.FTP简介 ​ FTP(File Transfer Protocol,文件传送协议)是TCP/IP网络上两台计算机间传送文件的协议,FTP是在TCP/IP网络和Internet上最早使用的协议之一,它属于网络协议…

【pytest】conftest.py使用

1. 创建test_project 目录 test_project/sub/test_sub.py def test_baidu(test_url):print(fsub {test_url}) test_project/conftest.py 设置钩子函数 只对当前目录 和子目录起作用 import pytest #设置测试钩子函数 pytest.fixture() def test_url():return "http…

可以创业,也可以副业的网上长期挣钱的项目

在这个飞速发展的互联网时代,越来越多的人开始尝试在网上创业或者寻找一份可持续的副业来增加收入。不过在网上赚钱的难度是比较大的,不是轻易就能做到的,所以不付出一番努力,没有悟性和执行力,那么是很难做好的&#…

淘天集团联合爱橙科技开源大模型训练框架Megatron-LLaMA

9月12日,淘天集团联合爱橙科技正式对外开源大模型训练框架——Megatron-LLaMA,旨在让技术开发者们能够更方便地提升大语言模型训练性能,降低训练成本,并保持和LLaMA社区的兼容性。测试显示,在32卡训练上,相…

pytorch环境搭建到pycharm项目映射配置(成功后回顾性记录/自用)

利用Anaconda创建pytorch虚拟环境 前提:成功安装Anaconda,确保可以打开NVIDIA控制面板 开始-》搜索“Anaconda Prompt” 打开后输入:conda create -n 你的虚拟环境名 python3.9。输入y,继续安装,完成。 输入&#…

【STM32学习】I2C通信协议 | OLED屏

🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言:你只管努力,剩下的交给时间! 今天需要将代码烧录到开发板中,本喵默认大家都会创建工程,以及进行基本的…

A股风格因子看板 (2023.09 第07期)

该因子看板跟踪A股风格因子,该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子,用以分析市场风格切换、组合风格景露等。 今日为该因子跟踪第7期,指数组合数据截止日2023-08-31,要点如下 近1年A股风格因子收益走…

【ELFK】之消息队列kafka

一、kafka的定义 Kafka 是一个分布式的基于发布/订阅模式的消息队列(MQ,Message Queue),主要应用于大数据实时处理领域。Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition&#xff0…

ImageJ查看图像灰度值矩阵及像素编号从0开始

ImageJ查看图像灰度值矩阵 imagej打开一幅图像 然后image —— transform——image to results,等一下就会出现灰度值矩阵 我读取的如下,可以看出,imagej对像素的编号是从0开始的,切记!!!跟C/…

编译原理.龙书学习1

第一章: 编译器:将程序翻译成一种能够被计算机执行的形式 解释器:解释器直接利用用户提供的输入执行源程序中指定的操作 一个编译器的结构 编译器将源程序映射为语义上等价的目标程序,这个映射过程由两部分组成:分析…

MyBatis友人帐之ResultMap及分页

一、ResultMap 1.1查询为null问题 要解决的问题&#xff1a;属性名和字段名不一致 解决方案 方案一&#xff1a;为列名指定别名 , 别名和java实体类的属性名一致 . <select id"selectUserById" resultType"User">select id , name , pwd as passwor…

【PyTorch 攻略 (4/7)】张量和梯度函数

一、说明 W在训练神经网络时&#xff0c;最常用的算法是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;根据损失函数相对于给定参数的梯度进行调整。损失函数计算神经网络产生的预期输出和实际输出之间的差异。 目标是获得尽可能接近零的损失函…

QUIC协议报文解析(三)

在前面的两篇文字里我们简单介绍了QUIC的发展历史&#xff0c;优点以及QUIC协议的连接原理。本篇文章将会以具体的QUIC报文为例&#xff0c;详细介绍QUIC报文的结构以及各个字段的含义。 早期QUIC版本众多&#xff0c;主要有谷歌家的gQUIC&#xff0c;以及IETF致力于将QUIC标准…

打印由数字组成的金字塔图案——python

1222 33333 4444444 555555555打印由数字组成的金字塔图案。但n9时&#xff0c;如下图所示。 输入格式: 输入一个整数n&#xff08;1<A<9&#xff09;。 输出格式: 输出由数字组成的金字塔图案。 输入样例: 在这里给出一组输入。例如&#xff1a; 5输出样例: 在这…

【 2023华为杯C题】大规模创新类竞赛评审方案研究(思路、代码......)

目录 1 题目概述 2 问题 3 极差的定义及标准分的计算方法 4 题目及数据下载 5 思路、代码下载...... 1 题目概述 现在创新类竞赛很多&#xff0c;其中规模较大的竞赛&#xff0c;一般采用两阶段&#xff08;网评、现场评审&#xff09;或三阶段&#xff08;网评、现场评审…

高效畅通的iOS平台S5配置指南

在iOS平台上&#xff0c;使用S5代理ip访问互联网是一种非常有用的技巧。无论是为了保证隐私安全&#xff0c;还是解决网络限制问题&#xff0c;S5代理ip都能为您提供更快、更稳定的互联网访问体验。本文将为您详细介绍如何在iOS平台上配置和使用S5代理ip&#xff0c;让您的网络…

git之撤销工作区的修改和版本回溯

有时候在工作区做了一些修改和代码调试不想要了,可如下做 (1)步骤1:删除目录代码,确保.git目录不能修改 (2)git log 得到相关的commit sha值 可配合git reflog 得到相要的sha值 (3)执行git reset --hard sha值,可以得到时间轴任意版本的代码 git reset --hard sha值干净的代…