Python 爬虫基础——http请求和http响应
写本篇文章,我认为是能把自己所理解的内容分享出来,说不定就有和我一样有这样思维的共同者,希望本篇文章能帮助大家!✨✨
文章目录
- 一、 🌈python介绍和分析
- 二、 🌈http请求
- 三、 🌈http响应
- 四、 🌈教程演示
- 五、🌈获取豆瓣top榜上前250部电影的响应内容
一、 🌈python介绍和分析
Python爬虫,又称网络爬虫或网页抓取程序,是一种自动化程序,它主要用于从互联网上抓取大量信息。这类程序按照预设的规则遍历互联网上的网页,并抽取其中有价值的数据。
思维导图
:
具体内容,Python爬虫通常涉及以下几个核心步骤:
-
发起请求:
- 使用Python中的HTTP库(如
requests
)模拟浏览器发送HTTP/HTTPS请求到目标网站,每个请求都包含了URL地址以及可能的请求头信息(如User-Agent、Cookie等)。
- 使用Python中的HTTP库(如
-
接收响应:
- 当服务器接收到请求后,会返回一个HTTP响应,其中包括状态码、响应头和网页内容(通常是HTML,但也可能是JSON、XML或其他格式)。
-
解析内容:
- 使用解析库(如
BeautifulSoup
、lxml
用于HTML/XML解析,PyQuery
、parsel
等)对响应内容进行解析,从中提取所需的数据。如果是结构化数据如JSON,可以直接使用Python的json
模块解析。
- 使用解析库(如
-
数据处理与存储:
- 抽取后的数据会被进一步处理(清洗、转化等),然后存储在本地文件(如CSV、JSON、TXT等格式)或数据库系统(如MySQL、MongoDB等)中,以便后续分析或构建应用。
-
URL管理与爬取策略:
- 爬虫还需要一个URL管理机制来跟踪已经访问过的链接,避免重复抓取,并决定接下来要抓取哪个URL,这可以通过内存、数据库或队列等方式实现。同时,爬虫还会涉及到一些高级策略,比如深度优先搜索(DFS)、广度优先搜索(BFS)、优先级队列等。
-
反爬与应对措施:
- 针对网站的反爬虫策略,爬虫开发者还可能需要处理cookies、session管理、验证码识别、动态加载内容等问题,甚至采用IP代理池等技术绕过访问限制。
本章节主要讲前面的第一小节:如何获取网页内容
二、 🌈http请求
- 请求行:
解析:方法类型 / 资源路径 (后面可跟查询参数)/ 协议版本
- 请求头
解析:域名 / 路径 ?查询参数User-Aent:用来告知服务器客户端的相关信息accept:客户端想接收的响应数据是什么类型的(文件名/类型和任意类型:*/*)
- 请求体
解析:存放客户端传给服务器的其他任意数据get的请求体一般是空的
三、 🌈http响应
- 状态行
解析:
协议版本 、状态码、状态消息
解析:
状态码和状态消息是对应的:(1)2开头的表示成功,请求已经完成处理(2)3开头的表示重定向,需要进一步的操作(3)4开头的表示客户端错误,比如请求里面有错误 或请求的资源无效等(4)5开头的表示服务器错误,比如出现问题或者正在维护
- 响应头
解析:
Date:生成响应的日期和时间Content-Type:返回内的类型及编码格式
- 响应体
解析:
html网页内容
四、 🌈教程演示
- 安装python第三方库requests,打开终端输入
pip install requests
import requests
# 获取请求网址 https://books.toscrape.com/ ——专门用于爬虫练习的网站
response=requests.get("https://books.toscrape.com/")
print(response)
print(response.status_code) # 检验请求是否成 返回200则成功
如果输出显示的内容是200,则说明该请求成功,其他则是其他原因,具体可参考请求响应错误原因:HTTP 响应状态码
输出:
- 利用if语句判断和ok的方法,请求成功则返回网页内容(以html的格式打印输出)
import requests
# 获取请求网址 https://books.toscrape.com/ ——专门用于爬虫练习的网站
response=requests.get("https://books.toscrape.com/")
# 利用判断语句,使用ok的方法获取网页数据
if response.ok:print(response.text) # 获取网页内容
else:print("请求失败")
输出内容:
五、🌈获取豆瓣top榜上前250部电影的响应内容
豆瓣网网址:https://movie.douban.com/top250
- 先看请求情况:
import requests
# 获取豆瓣top榜上前250部电影的响应内容
response=requests.get("https://movie.douban.com/top250")
# 查看获取响应的状态码是什么
print(response.status_code)
输出:
具体什么是418参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/418
- 如何模拟浏览器的构成(请求头)
随便找一个网页,进入控制台,鼠标右键——检查或者按F12 ,网络(刷新)——随便点击一个响应——找到Request Headers里面的User-Agent,复制后面的内容写入代码中。
代码块:
import requests# 模拟浏览器的构成(请求头)以字典的形式存储,将复制冒号后的内容填写,
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"
}
# 获取豆瓣top榜上前250部电影的响应内容
response=requests.get("https://movie.douban.com/top250",headers=headers)
# 查看获取响应的状态码是什么
print(response.status_code)
# 打印response的内容
print(response.text)
显示200 ,响应成功且获取信息成功
本章内容到此结束,谢谢大家的支持,希望本期作品可以简单帮助大家了解爬虫基础
大家一起学习呀!🔥🔥🔥🔥
相关文章:

Python 爬虫基础——http请求和http响应
写本篇文章,我认为是能把自己所理解的内容分享出来,说不定就有和我一样有这样思维的共同者,希望本篇文章能帮助大家!✨✨ 文章目录 一、 🌈python介绍和分析二、 🌈http请求三、 🌈http响应四、…...
【Hadoop】Hive导入导出数据指南
穿新衣吧 剪新发型呀 轻松一下Windows98 打扮漂亮 18岁是天堂 我们的生活甜得像糖 穿新衣吧 剪新发型呀 轻松一下Windows98 以后的路不再会有痛苦 我们的未来该有多酷 🎵 房东的猫《new boy》 Apache Hive 是一个基于Hadoop的数据仓库工具&…...
Mybatis 执行批量插入
首先,创建一个简单的 insert 语句: <insert id”insertname”>insert into names (name) values (#{value}) </insert>然后在 java 代码中像下面这样执行批处理插入: list < string > names new arraylist(); names.add(“fred”); names.add(“barney”)…...

vivado 使用基本触发器模式
使用基本触发器模式 基本触发器模式用于描述触发条件 , 即由参与其中的调试探针比较器组成的全局布尔公式。当“触发器模式 (Trigger Mode) ”设置为 BASIC_ONLY 或 BASIC_OR_TRIG_IN 时 , 即启用基本触发器模式。使用“基本触发器设置 (Basic Trig…...
Chrome 浏览器无法保存或自动填充密码
Chrome 浏览器无法保存或自动填充密码 分类 平时使用 Chrome 浏览器都会对网站的用户名密码自动填充,今天发现突然不行了,找到一个解决办法: 1、退出 Chrome 浏览器。2、打开 Chrome 安装目录下的的 Profile 目录,删除 Login Da…...
C语言面试指针辨析
1. const int *p int const *p p可以改变,*p不可以改变 p可以指向任意空间,但无法利用p修改指针空间的值 2. int *const p p不能改变,*p可以改变 3. const int *const p int const *const p p和*p都不能改变 4. 面试问题 将内存地址为0x2…...

YOLOV5 分类:利用yolov5进行图像分类
1、前言 之前介绍了yolov5的目标检测示例,这次将介绍yolov5的分类展示 目标检测:YOLOv5 项目:训练代码和参数详细介绍(train)_yolov5训练代码的详解-CSDN博客 yolov5和其他网络的性能对比 yolov5分类的代码部分在这 2、数据集准备 yolov5分类的数据集就是常规的摆放方式…...

Golang | Leetcode Golang题解之第16题最接近的三数之和
题目: 题解: func threeSumClosest(nums []int, target int) int {sort.Ints(nums)var (n len(nums)best math.MaxInt32)// 根据差值的绝对值来更新答案update : func(cur int) {if abs(cur - target) < abs(best - target) {best cur}}// 枚举 a…...

React添加到现有项目
1.检查现有项目的根目录下是否有package.json文件 如果没有,则在项目的根目录下初始化一个package.json配置文件 2.在根目录下安装react和react-dom依赖 npm install --save react react-dom react-scripts安装成功后,react、react-dom以及react-scr…...

java 邮件发送表格
邮件发送表格 问题导入效果图 实现方案1. 拼接HTML文件(不推荐)2. excel 转HTML使用工具类来转化依赖工具类代码示例 使用已工具包 如 aspose-cells依赖代码示例 3.使用模板生成流程准备模板工具类代码示例 问题导入 在一些定时任务中,经常会…...
鸿蒙ArkTS小短剧开源项目进行中
鸿蒙小短剧开源项目进行中 短剧项目名称:CCShort-TV 短剧项目名称:CCShort-TV 使用ArtTS语言,API9以上,HarmonyOS系统的短剧开源代码,使用GSYVideoPlayer作为核心播放器的小短剧。主要以ArkTS,ArkUI编写为…...

Go 项目依赖注入wire工具最佳实践介绍与使用
文章目录 一、引入二、控制反转与依赖注入三、为什么需要依赖注入工具3.1 示例3.2 依赖注入写法与非依赖注入写法 四、wire 工具介绍与安装4.1 wire 基本介绍4.2 安装 五、Wire 的基本使用5.1 前置代码准备5.2 使用 Wire 工具生成代码 六、Wire 核心技术5.1 抽象语法树分析5.2 …...

地推网推拉新致富是真的吗?靠谱平台揭秘
在互联网时代,各种平台层出不穷。为了吸引更多用户,这些平台常常会推出各种地推网推拉新活动。如果你懂得如何利用,那么你也有机会从中获得一笔不小的收入。 当然,在地推网推拉新赚钱的过程中,也需要注意一些问题。首…...

VTK使用交互器来从三维体数据中提取二维切片
VTK中鼠标消息是在交互类型对象(interactorstyle)中响应,因此通过为交互类型对象(interactorstyle)添加观察者(observer)来监听相应的消息,当消息触发时,由命令模式执行相…...

NCBI 数据下载
网上介绍的那几种直接下载NCBI数据的方法大都下载速度很慢,但是EBI (European Bioinformatics Institute) 下载很快,而且它的数据库和NCBI是共享的,所以我们可以直接从 EBI 下载。 1 、 确定要下载的 SRA 编号; 2 、 EBI (https…...
【Rust】基础语法
变量,基本类型,函数,注释和控制流,这些几乎是每种编程语言都具有的编程概念。 这些基础概念将存在于每个 Rust 程序中,及早学习它们将使你以最快的速度学习 Rust 的使用。 变量 首先必须说明,Rust 是强类…...

JVM基础:类的生命周期详解
JDK版本:jdk8 IDEA版本:IntelliJ IDEA 2022.1.3 文章目录 一. 生命周期概述二. 加载阶段(Loading)2.1 加载步骤2.2 查看内存中的对象 三. 连接阶段(Linking)3.1 连接之验证3.2 连接之准备3.3 连接阶段之解析 四. 初始化阶段(Initialization)4.1 单个类的…...

【Canvas技法】在Canvas按圆周绘制图形或是标注文字时,角度累加的方向为顺时针,起点为x轴正向
【图解说明】 【核心代码】 // 画圆弧及方向for(var i0;i<4;i){var startMath.PI/2*i;var endstartMath.PI/2;var x1180*Math.cos(start);var y1180*Math.sin(start);var x2180*Math.cos(end);var y2180*Math.sin(end);ctx.beginPath();ctx.arc(0,0,180,start,end,false);ct…...

计算机网络-TCP断开连接阶段错误应对机制
连接断开阶段 四次挥手机制:TCP连接的断开需要四次挥手,这是因为双方都需要独立地关闭数据传输。第二次和第三次挥手不能合并,因为在回复第二次挥手的时候,可能还有数据没有接收完成,所以需要先回复ACK报文,…...
springboot动态使用DruidDataSource切换数据源(动态配置多个数据源)
1、添加依赖,在pom文件中添加 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>2.5.0</version></dependency><dependency><grou…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...