爬虫基本知识的认知(爬虫流程 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那怎么办?如果文本分类里面的…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
