爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例
爬虫是指通过程序自动化地从互联网上获取数据的过程。
基本的爬虫流程可以概括为以下几个步骤:
- 发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。
- 解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面进行解析,提取出需要的数据。
- 存储数据:将解析出来的数据存储到本地或者数据库中,以供后续分析或使用。
HTTP 协议是爬虫获取数据的基础,爬虫程序需要构造 HTTP 请求,发送到目标服务器,获取数据并进行解析。
HTTP 请求主要由请求头和请求体组成:
- 请求头包含请求方法、目标 URL、HTTP 版本号以及请求头信息等;
- 请求体则是携带了请求参数和请求数据。
在构造 HTTP 请求时,需要注意目标网站可能会对爬虫进行限制,如设置反爬虫机制,通过增加请求头中的 User-Agent 字段、设置请求时间间隔、使用代理 IP 等方式可以降低被限制的风险。
文章目录
- HTTP 协议介绍
- http 协议 请求行,请求头,请求体
- HTTP 协议响应
HTTP 协议介绍
HTTP(HyperText Transfer Protocol)是一种应用层协议,用于在客户端和服务器之间传输超文本数据。
HTTP 协议是一个基于请求-响应模型的协议,客户端发送 HTTP 请求到服务器,服务器返回 HTTP 响应。
HTTP 请求由三部分组成:请求行、请求头和请求体。
- 请求行包括请求方法、URL 和 HTTP 版本号;
- 请求头包括一些关于请求的元数据,比如 User-Agent、Cookie 等;
- 请求体则包含请求的数据。
HTTP 响应也由三部分组成:状态行、响应头和响应体。
- 状态行包括响应的状态码和状态文本;
- 响应头包括一些关于响应的元数据,比如 Server、Content-Type 等;
- 响应体则包含响应的数据。
下面是一个简单的使用 Python 发送 HTTP GET 请求的例子:
import requestsurl = 'http://pachong.vip'
response = requests.get(url)
print(response.status_code) # 打印状态码
print(response.headers) # 打印响应头
print(response.text) # 打印响应体
上面的代码使用 requests 库发送一个 HTTP GET 请求到 pachong.vip,并输出了状态码、响应头和响应体。
requests 库是 Python 中用于发送 HTTP 请求的常用库,它提供了简单易用的 API,可以轻松地发送 HTTP 请求并处理 HTTP 响应。
http 协议 请求行,请求头,请求体
HTTP 请求可以分为三部分:请求行、请求头和请求体。
如果 HTTP 协议是一部动漫的话,请求行就相当于开头的标题,请求头就相当于主演的演员表,请求体就是动漫的具体内容。
请求行包含三个部分,分别是请求方法、请求 URL 和 HTTP 协议版本。
把请求行想象成向一个迷路的人询问路线的场景,请求方法就是你说的话,“请问去哪里”,请求 URL 就是你想去的目的地,“我要去机场”,HTTP 协议版本就是你们沟通的语言,“用中文交流”。
请求头可以包含多个键值对,用来传递请求的附加信息,比如 User-Agent、Referer 等。
把请求头想象成你在约会时候的小手册,里面包含了你的身份、约会地点等信息。如果你带上了自己的照片,那么 User-Agent 就相当于照片里的头像,是你的标识;Referer 就相当于你约会时对方提供的位置,让你更清楚地了解约会地点的信息。
请求体是 POST 请求中传递参数的部分
把请求体想象成你向对象表白时的话语,里面包含了你的真心话。比如你向喜欢的人表白时说的“我喜欢你”,这句话就相当于请求体中的内容。
如果你使用 Python 发送 HTTP 请求,可以使用 requests 库。下面是一个例子,访问爬虫训练场
import requestsurl = "http://pachong.vip"
response = requests.get(url)print(response.content)
HTTP 协议响应
当我们使用 Python 进行网络爬取时,经常需要通过 HTTP 请求来获取服务器返回的数据。而服务器返回的响应通常也是由三部分组成:状态行、响应头和响应体。
下面是一个用 Python 模拟发送 HTTP 请求,并获取响应的示例代码:
import requests# 发送 HTTP 请求
response = requests.get('https://pachong.vip')# 获取响应状态行
status_line = response.status_code# 获取响应头
headers = response.headers# 获取响应体
content = response.textprint(f'响应状态行:{status_line}')
print(f'响应头:{headers}')
print(f'响应体:{content}')
这个代码中,使用 Python 的 requests 库来发送 HTTP 请求,获取了服务器返回的响应。
然后通过 response.status_code、response.headers 和 response.text 分别获取了响应的状态行、响应头和响应体,并将它们打印输出。
如果将这个场景生活化,例子如下。
-
我们请求了三体的官网,服务器给你回了一份响应,这份响应分为三个部分,就像是三体人对你的回答。
-
第一条是状态行,相当于三体人告诉你了这个回答的状态,比如是成功还是失败。就像是三体人告诉你他们有没有你想要的技术。
-
第二条是响应头,相当于三体人告诉你一些额外的信息,比如他们的地址、星球坐标等等,就像是三体人告诉你一些和技术无关但是你也需要知道的信息。
-
第三条响应体,相当于三体人给你展示了他们的星球,比如是充满火或者是充满水的图片。
当你收到这份响应之后,你可以根据里面的信息决定接下来该怎么做,是继续呆着还是逃跑。
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 1122 篇原创博客
从订购之日起,案例 5 年内保证更新
- ⭐️ Python 爬虫 120,点击订购 ⭐️
- ⭐️ 爬虫 100 例教程,点击订购 ⭐️
相关文章:

爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例
爬虫是指通过程序自动化地从互联网上获取数据的过程。 基本的爬虫流程可以概括为以下几个步骤: 发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面…...

Ubuntu20.04如何安装虚拟机(并安装Android)
安装虚拟机(KVM)这种KVM只能安装windows无法安装安卓(From https://phoenixnap.com/kb/ubuntu-install-kvm)A type 2 hypervisor enables users to run isolated instances of other operating systems inside a host system. As a Linux based OS, Ubun…...
【腾讯一面】我对我的Java基础不自信了
我对我的Java基础不自信了1、List和set的区别?2、HashSet 是如何保证不重复的3、HashMap是线程安全的吗,为什么不是线程安全的?4、HashMap的扩容过程5、Java获取反射的三种方法6、Redis持久化机制原理7、redis持久化的方式各有哪些优缺点1、L…...

前端都在聊什么 - 第 2 期
Hello 小伙伴们早上、中午、下午、晚上、深夜好,我是爱折腾的 jsliang~「前端都在聊什么」是 jsliang 日常写文章/做视频/玩直播过程中,小伙伴们的提问以及我的解疑整理。本期对应 2023 年的 01.16-01.31 这个时间段。本期针对「规划」「工作」「学习」「…...

每天一道大厂SQL题【Day11】微众银行真题实战(一)
每天一道大厂SQL题【Day11】微众银行真题实战(一) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…...
Cosmos 基础教程(一) -- 不可不知的开发术语
CometBFT DOC 您可以在本节中找到几个技术术语的概述,包括每个术语的解释和进一步资源的链接——在使用Cosmos SDK进行开发时,所有这些都是必不可少的。 在本节中,您将了解以下术语: Cosmos and Interchain LCD RPC Protobuf -协议缓冲…...

JAVA JDK 常用工具类和工具方法
目录 Pair与Triple Lists.partition-将一个大集合分成若干 List集合操作的轮子 对象工具Objects 与ObjectUtils 字符串工具 MapUtils Assert断言 switch语句 三目表达式 IOUtils MultiValueMap MultiMap JAVA各个时间类型的转换(LocalDate与Date类型&a…...

Spring Bean循环依赖
解决SpringBean循环依赖为什么需要3级缓存?回答:1级Map保存单例bean。2级Map 为了保证产生循环引用问题时,每次查询早期引用对象,都拿到同一个对象。3级Map保存ObjectFactory对象。数据结构1级Map singletonObjects2级Map earlySi…...

Hive 2.3.0 安装部署(mysql 8.0)
Hive安装部署 一.Hive的安装 1、下载apache-hive-2.3.0-bin.tar.gz 可以自行下载其他版本:http://mirror.bit.edu.cn/apache/hive/ 2.3.0版本链接:https://pan.baidu.com/s/18NNVdfOeuQzhnOHVcFpnSw 提取码:xc2u 2、用mobaxterm或者其他连接…...
IPD术语表
简称英文全称中文ABPannual business plan年度商业计划ABCactivity -based costing基于活动的成本估算ABMactivity -based management基于活动的管理ADCPavailability decision check point可获得性决策评审点AFDanticipatory failure determination预防错误决定AMEadvanced ma…...
目标检测损失函数 yolos、DETR为例
yolos和DETR,除了yolos没有卷积层以外,几乎所有操作都一样。 HF官方文档 因为目标检测模型,实际会输出几百几千个“框”,所以损失函数计算比较复杂。损失函数为偶匹配损失 bipartite matching loss,参考此blog targe…...

linux系统编程2--网络编程socket
在linux系统编程中网络编程是使用socket(套接字),socket这个词可以表示很多概念:在TCP/IP协议中,“IP地址TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址端口号”就称为socket。在TCP协议中&#…...

FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持
目录1、前言2、目前主流的FPGA图像缩放方案3、本方案的优越性4、详细设计方案5、vivado工程详解6、上板调试验证并演示7、福利:工程源码获取1、前言 代码使用纯verilog实现,没有任何ip,可在Xilinx、Intel、国产FPGA间任意移植; 图…...
华为OD机试题 - 最长合法表达式(JavaScript)| 代码+思路+重要知识点
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 使用说明 参加华为od机试,一定要注意不要完全背…...
L1-005 考试座位号
L1-005 考试座位号 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试…...
Obsidian + remotely save + 坚果云:实现电脑端和手机端的同步
写在前面:近年来某象笔记广告有增无减,不堪其扰,便转投其它笔记,Obsidian、OneNote、Notion、flomo都略有使用,本人更偏好obsidian操作简单,然其官方同步资费甚高,囊中羞涩,所幸可通…...

对比学习MoCo损失函数infoNCE理解(附代码)
MoCo loss计算采用的损失函数是InfoNCE: 下面是MoCo的伪代码,MoCo这个loss的实现就是基于cross entropy loss。 将k作为q的正样本,因为k与q是来自同一张图像的不同视图;将queue作为q的负样本,因为queue中含有大量…...

logd守护进程
logd守护进程1、adb logcat命令2、logd守护进程启动2.1 logd文件目录2.2 main方法启动3、LogBuffer缓存大小3.1 缓存大小优先级设置3.2 缓存大小相关代码位置android12-release1、adb logcat命令 命令功能adb bugreport > bugreport.txtbugreport 日志adb shell dmesg >…...

【汽车雷达通往自动驾驶的关键技术】
本文编辑:调皮哥的小助理 现代汽车雷达装置比手机还小,能探测前方、后方或侧方的盲点位置是否存在障碍物,但这还不百分之百实现全自动驾驶的。传统的汽车雷达分辨率都不高,只能“看到”一团东西,可以检测到汽车周围存在…...
2023实习面经
实习面经 秋招笔试面试全记录 字节-电商 字节实习一面: 二分类的损失函数是什么,怎么算?多分类的损失函数怎么算?如果文本分类的标签有多个,比如一个文本同时属于多个label那怎么办?如果文本分类里面的…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...