关于爬虫需要了解的基础知识 (一、 http协议)

news2024/12/23 13:32:11

声明

文章仅供学习与交流!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!

一、何为爬虫

        爬虫(Crawler)是一种按照既定规则,在网络上自动爬取信息的程序或脚本,也称为网际网路蜘蛛(Internet Spider)或网络机器人(Web Robot)。爬虫的工作流程一般可以分为四步:确定初始网页地址(URL)、发送请求下载对应的网页、分析网页内容并提取需要的信息、提取页面中的链接作为新的网页地址(URL),然后继续循环执行上述流程,直到满足结束条件。

总结一句话就是:模拟浏览器打开网页,获取网页中我们想要的那部分数据。

二、爬虫需要了解的基础知识

        爬虫的第一步就是确定初始网页地址(URL)、发送请求下载对应的网页,这一句话其实包含了好几个知识点。接下来我将拆分这个过程逐个讲解。

1、确定初始网页地址(URL)

        URL 的全称为 Universal Resource Locator,即统一资源定位符,通常就是我们所说的网址。

例如:https://baike.baidu.com:443/item/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%B3%BB%E7%BB%9F/5937042?lang=zh-cn&keys=url

上面的例子我们可以拆分为几个部分:

①、协议:https或者http

②、域名:baike.baidu.com

③、端口:443

补充:https协议默认端口为443,http协议默认端口为80,浏览器会默认隐藏443和80端口显示,所以https://baike.baidu.com:443/和https://baike.baidu.com/在浏览器中效果一样

④、路径:由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址

/item/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%B3%BB%E7%BB%9F/5937042

补充:

"%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%B3%BB%E7%BB%9F"这一段其实是中文进过URL编码后的字符,有时候我们复制出的网页地址很长一段其实就是因为地址包含中文

可以用在线解码工具查看

⑤、参数:从"?"开始的部分为参数部分,又称搜索部分、查询部分

上述链接中的参数为?lang=zh-cn&keys=url包含两个参数。第一个参数名为lang,参数值为zh-cn,通常这个参数的意思通常是用于设置语言,即设置语言为中文。第二个参数通过"&"字符分隔,参数名为keys,参数值为url。

(两个参数为说明使用,该网站实际无这两个参数)

2、https/http协议

        爬虫都是通过https或者http协议进行网络请求,第一部分的所有讲解都是为了学习http协议做铺垫。(https协议就是安全版本,小白目前不用考虑太多,可以当做http协议来学习)

        http的全称是 Hyper Text Transfer Protocol,中文名叫做超文本传输协议,是一种简单、快速、无状态的传输协议。当客户端向服务器端发送请求时,只是简单的填写请求路径和请求方法即可。这里说的"无状态"是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。简单说明就是按http协议的方法打电话,相当于每次打给对方只能说一句话,然后等待对方会对方,对方回复玩完后又立马挂断。

        由于这个特点,意味着客户端的每次请求都是独立的,与之前的请求或之后的请求无关,服务器不会在两个请求之间保留任何上下文信息。这样设计的好处是服务器不需要存储大量的信息来管理客户端的状态,这使得服务器更容易扩展,因为它不需要在多个请求之间同步状态。

注:本文中所有的客户端都当做浏览器即可

登录状态信息

        然而,有时我们需要维护客户端状态,就要在每次请求报文中附加参数来管理登录状态,这时就需要用到一些机制来保存状态,比如:

①、Cookie:服务器可以在响应头中加入一个Cookie,客户端会存储这个Cookie,并在后续的请求中发送回服务器。服务器就可以通过读取Cookie的内容来识别客户端。(90%的网站都是将登录信息存储在这里)

可以在浏览器中按F12,找到应用/application中查看自己在所在网站的cookies

②、Token(如JWT):客户端请求时携带一个Token,服务器端验证Token来识别用户状态。

(部分网站会将token信息存储在Cookie中,这种情况和使用Cookie等同。也有部分网站将token单独放入请求头或者请求体中)

补充:删除Cookie或者Token就会导致网站的登录失效

http请求的形式

http是基于客户/服务器模式(C/S模式),面向连接的。一次完整的http请求流程如下:

(1)客户与服务器建立连接;

(2)客户向服务器提出请求;

(3)服务器接受请求,并根据请求返回相应的文件作为应答;

(4)客户与服务器关闭连接。

        请求部分可以分为 3 部分内容:请求方法(Request Method)、请求头(Request Headers)、请求体(Request Body),http协议就是通过这些内容告知服务器我们需要什么数据。

        目前爬虫的方式主要有两种,一种是通过接口调用爬取数据,这种方式就是直接发送请求。优点是速度快,效率高。缺点是部分网站有接口验证参数,不破解接口会被拦截掉。另外一种是通过selenium等通过浏览器模拟人工操作进行爬虫,优点是简单,用于爬取抖音视频这类交互型网站比较方便。缺点是效率相对较低,部分网站也有识别机制,会弹出验证码进行人机校验。

        无论是上述哪种方法爬虫,都需要通过http的请求和响应爬取数据,所以掌握http的请求和响应是必备技能。下面我们通过一个案例讲解http的响应和请求。

首先打开一个网站的页面:

在浏览器中按F12打开开发者控制台,找到网络,勾选"保留日志"

        然后在输入框中输入"爬虫"点击回车,下面会出现一片列表,这些都是浏览器发送的请求,和服务器回传数据的响应

        找到v2开头的数据,点击它,右侧就会显示请求和响应的详情

        详情页面首先会展示基础信息,比如请求方法,响应状态以及请求头和响应头。其中请求方法和响应状态比较重要。

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

        我们通常只需要关注GET请求和POST请求即可,90%的请求都是使用这两种方式。两者最直观的区别就是 GET 把参数包含在 URL 中,在浏览器的地址栏可以直接看到请求的参数(就像第一部分讲的"?lang=zh-cn&keys=url"两个参数)。POST 通过请求体(request body) 传递参数,这部分请求不会包含在URL中,往往用于登录请求以及参数数据量大的请求(如上传文件)。

        无论那种请求方式,我们都可以在开发者控制台中的载荷中查看请求参数。

        因为这个接口用的是GET请求,所以我们在请求头的路径中可以查看到上面的所有参数

​        

        请求就是告诉服务器我们需要什么数据,而响应就是服务器返回给我们的数据,和请求一样,响应也分为响应头(response head)和响应体(response body)

        点击"预览"或者"响应"标签就可以查看响应数据详情。

响应状态码简单归类:

  1**:信息,服务器收到请求,需要请求者继续执行操作

  2**:成功,操作被成功接收并处理

  3**:重定向,需要进一步的操作以完成请求

  4**:客户端错误,请求包含语法错误或无法完成请求

  5**:服务器错误,服务器在处理请求的过程中发生了错误

常见的状态码:

  200,请求成功(部分接口返回失败也是200状态,需要具体情况具体分析)

  201,已创建,成功请求并创建了新的资源

  202,已接受,已接受请求,但未处理完成

  301,永久重定向,请求的资源被永久移到新URL,今后任何新的请求都应使用新的URL代替

  302,暂时重定向,资源只是临时被移动,客户端仍使用原有的URL

  400,客户端请求的语法错误,服务器无法理解

  401,请求要求用户的身份认证

  403,服务器理解客户端的请求,但是拒绝执行的请求

  404,服务器无法根据客户端的请求找到资源

  500,服务器内部错误,无法完成请求

  501,服务器不支持请求的功能,无法完成请求

  503,由于超载或系统维护,服务器暂时无法处理客户端的请求

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

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

相关文章

VidPanos:从随手拍摄的平移视频生成全景视频

在当今数字化时代,视频拍摄已经成为人们记录生活和分享经历的重要方式。然而,普通手机拍摄的视频往往受到视角的限制,无法完整地展现一个广阔的场景。今天,我们要介绍的 VidPanos 技术,为解决这个问题提供了一种创新的方法。 VidPanos 是由来自华盛顿大学、谷歌 DeepMind…

【05】如何解决tomcat命令提示符控制台乱码问题

Web项目开发过程中,直接在命令提示符窗口中通过输入startup.bat命令运行tomcat,在新弹出的tomcat命令提示符窗口中输出的中文是乱码问题的处理。 如何解决tomcat命令提示符控制台乱码问题 文章目录 如何解决tomcat命令提示符控制台乱码问题1.解决问题思路…

02- 模块化编程-003 LCD1602液晶显示时间与日期

1、液晶显示电路 2、电路原理简介 1. 电路组件与功能 PIC单片机(PIC16F887): 主控制器,负责处理输入输出。 LCD显示屏(LM061): 驱动数码管显示器,以显示时间和日期信息。 支持多个段…

conda下jupyterlab安装问题以及交互绘图问题记录

安装 1. 直接conda install jupyterlab就好,只要在base环境下安装就行,可以在任意环境下执行jupyter lab启动。 2. 打开jupyter lab后显示Could not determine jupyterlab build status without nodejs,可以执行conda install nodejs安装no…

华为OD机试 - 预订酒店(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

LM Head weights;ChatGPT-3词汇量:175,000;llama7b 词汇量,词嵌入维度:4096

目录 LM Head weights ChatGPT-3词汇量:175,000 llama7b 词汇量 词汇量:32000 max_position_embeddings: 4096 LM Head weights ChatGPT-3词汇量:175,000 ChatGPT-4 确切的词向量种类数量公开信息。但可以根据一些语言模型的相关知识进行推测分析。 一般来说,语言模…

极简实现酷炫动效:Flutter隐式动画指南第二篇之一些酷炫的隐式动画效果

目录 前言 1.弹性放大按钮效果 2.旋转和缩放组合动画 3.颜色渐变背景动画 4.缩放进出效果 前言 在上一篇文章中,我们介绍了Flutter中的隐式动画的一些相关知识,在这篇文章中,我们可以结合多个隐式动画 Widget 在 Flutter 中创建一些酷炫的视觉效果&…

【ONLYOFFICE 文档 8.2 版本深度测评】功能革新与用户体验的双重飞跃

引言 在数字化办公的浪潮中,ONLYOFFICE 文档以其强大的在线协作功能和全面的办公套件解决方案,赢得了全球用户的青睐。随着 8.2 版本的发布,ONLYOFFICE 再次证明了其在办公软件领域的创新能力和技术实力。 一.协作编辑 PDF:团队合…

高频电子线路---倍频器与振荡器

目录 倍频电路原理 丙类倍频器原理电路 问题: 提升滤波方法: 导通角 振荡器 振荡器基本工作原理 首先是怎么维持 那么如何振荡呢? 思考题: 组成要素 振荡器的起振条件 平衡条件 要点提示 稳定条件 振幅平衡 硬激励起振时: 稳定条件 相位平衡 倍频电路原理 简单原理 : …

自杀一句话木马(访问后自动删除)

在做安全测试时&#xff0c;例如文件上传时就要上传可以解析的脚本文件解析证明存在漏洞&#xff0c;这个时候就需要(访问后自动删除文件的一句话木马) PHP <?php echo md5(1);unlink(__FILE__); ?> 访问后自动删除

Windows配置Nodejs及nmp简明教程(2024可用)

一、下载及安装Nodejs 下载 Node.js 中文网 (nodejs.com.cn)在此下载windows长期维护版本的.msi安装包&#xff0c;64位 安装&#xff1a; 双节安装包一直点击Next下一步&#xff0c;注意安装路径选择C盘默认路径&#xff08;C:\Program Files\nodejs\&#xff09;即可&#x…

使用ffmpeg和mediamtx模拟多通道rtsp相机

首先下载ffmpeg&#xff0c;在windows系统上直接下载可执行文件&#xff0c;并配置环境变量即可在命令行当中调用执行。 下载地址&#xff1a; https://ffmpeg.org/再在github上下载mediamtx搭建rtsp服务器&#xff0c;使用ffmpeg将码流推流到rtsp服务器。 下载地址&#xff1…

Unreal5从入门到精通之如何在VR中使用3DUI

文章目录 前言创建3DUI1.新建控件蓝图2.添加控件到画布上3.新建Actor蓝图MyUIActor4.添加控件组件Widget5.设置控件类和画布大小6.创建MyUIActor实例到场景中3DUI和VR射线交互1.添加按钮的点击事件2.设置MyUIActor碰撞响应3.VRPawn添加控件交互组件4.添加手柄Trigger点击事件绑…

ai数字人分身123口播克隆数字人小程序源码_博纳软云

功能配置 一、用户 用户管理小黑屋用户反馈登录设置短信参数 二、作品 视频作品背景音乐库背景音乐分类 三、形象分身 上传记录视频要求参数配置 四、声音克隆 克隆记录参数配置声音要求文案示例 五、AI文案 生成记录创作模型模型分类Al配置 六、充值 充值订单积分套…

活动回顾丨艾体宝《开源软件供应链安全的最佳实践》线下研讨会圆满落幕!

10月&#xff0c;艾体宝联合Mend成功举办了一场主题为“开源软件供应链安全最佳实践”的研讨会。此次活动吸引了众多业内专家、技术领袖和企业代表参与&#xff0c;共同探讨在当今数字化转型浪潮中&#xff0c;企业如何应对开源软件供应链安全的挑战。会议围绕三大核心议题展开…

java项目之校园周边美食探索及分享平台(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园周边美食…

esp32cam+Arduino IDE在编译时提示找不到 esp_camera.h 的解决办法

多半是因为你的ESP32库升级了&#xff0c;不再是 1.02版本&#xff0c;或者根本就没有 ESp32 库。如果被升级了&#xff0c;还原为1.02版本就可以了。如果没有&#xff0c;按照下述方法添加&#xff1a; 首先&#xff0c;在"文件"->"首选项"->"…

Rust 力扣 - 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 长度为k的二进制子串所有取值的集合为[0, sum(k)]&#xff0c;其中sum(k)为1 2 4 … 1 << (k - 1) 我们只需要创建一个长度为sum(k) 1的数组 f &#xff0c;其中下标为 i 的元素用来标记字符串中子串…

Edit Data. Create Cell Editors. Validate User Input 编辑数据。创建 Cell Editors。验证用户输入

Goto Data Grid 数据网格 Edit Data. Create Cell Editors. Validate User Input 编辑数据。创建 Cell Editors。验证用户输入 Get and Modify Cell Values in Code 在代码中获取和修改单元格值 仅当 Grid 及其列已完全初始化时&#xff0c;才使用以下方法。如果需要在表单仍…

网络:ARP的具体过程和ARP欺骗

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言ARP具体过程ARP欺骗原理总结 前言 本文仅作为ARP具体过程和ARP欺骗的知识总结 硬件类型 &#xff1a;指定发送和接受ARP包的硬件类型&am…