Python 3.8 Requests 爬虫教程(2025最新版)

devtools/2025/4/1 5:30:18/

遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私!

一、环境配置与基础验证

python"># 验证 Python 版本(需 ≥3.8)
import sys
print(sys.version)  # 应输出类似 3.8.12 的信息# 安装 requests 库(若未安装)
# 命令行执行:pip install requests# 基础请求验证
import requests
response = requests.get("https://httpbin.org/get")
print("状态码:", response.status_code)  # 成功返回 200

二、HTTP 请求全流程解析

1. GET 请求原理与实现

python"># GET 请求参数传递
import requestsparams = {"category": "books", "page": 2}
response = requests.get("https://httpbin.org/get",params=params,headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36","Referer": "https://www.example.com"}
)
print("最终请求 URL:", response.url)  # 显示自动拼接的完整 URL# 响应内容解析
print("响应头:", response.headers)
print("JSON 数据:", response.json()["args"])  # 获取查询参数

原理说明

  • GET 请求将参数附加在 URL 后面,通过 ?key1=value1&key2=value2 形式传递
  • headers 参数用于伪装浏览器,避免被反爬机制拦截

2. POST 请求原理与实现

python"># 表单数据提交
import requestsform_data = {"username": "test_user", "password": "p@ssw0rd"}
response = requests.post("https://httpbin.org/post",data=form_data,headers={"Content-Type": "application/x-www-form-urlencoded"}
)
print("表单响应:", response.json()["form"])# JSON 数据提交
json_data = {"title": "Python 教程", "views": 1500}
response = requests.post("https://httpbin.org/post",json=json_data,headers={"Content-Type": "application/json"}
)
print("JSON 响应:", response.json()["json"])

原理说明

  • POST 请求通过请求体传递数据,需显式设置 Content-Type
  • json= 参数会自动序列化字典并设置正确头信息

response 的核心属性

python"># 文本形式
print("文本形式:", response.text)  # 返回文本形式# 解析JSON格式响应
print("JSON格式响应:", response.json())  # 解析JSON格式响应# 状态码(HTTP协议标准代码)
print("状态码:", response.status_code)  # 200表示成功 # 响应头(HTTP头信息)
print("响应头:", response.headers)  # 包含Content-Type、Server等信息  # 编码格式(自动检测或手动设置)
print("编码:", response.encoding)  # 默认为'utf-8',可通过response.encoding = 'gbk'修改 # 原始响应内容(二进制形式)
print("原始内容:", response.content[:100])  # 前100字节  # 请求URL(可能因重定向改变)
print("实际请求URL:", response.url)  # 包含重定向后的最终地址 

三、Cookie 全场景管理

1. 手动设置 Cookie

python">import requests# 通过字典直接设置
cookies = {"session_id": "a1B2c3D4", "user_token": "x9y8z7"}
response = requests.get("https://httpbin.org/cookies",cookies=cookies
)
print("服务器收到的 Cookie:", response.json()["cookies"])# 使用 RequestsCookieJar 精确控制
from requests.cookies import RequestsCookieJarjar = RequestsCookieJar()
jar.set("tracking", "t1", domain=".example.com", path="/api")
response = requests.get("https://httpbin.org/cookies", cookies=jar)
print("精确控制的 Cookie:", response.json())

关键点

  • domainpath 参数需与目标网站匹配
  • RequestsCookieJar 支持复杂 Cookie 操作(如过期时间设置)

2. 会话级 Cookie 管理

python"># 使用 Session 对象自动管理
import requestswith requests.Session() as s:# 首次登录设置 Cookielogin_data = {"user": "admin", "pass": "admin123"}s.post("https://httpbin.org/post", data=login_data)# 后续请求自动携带 Cookieresponse = s.get("https://httpbin.org/cookies")print("会话 Cookie:", response.json())

优势

  • 自动复用 TCP 连接,提升请求效率
  • 跨请求保持 Cookies 和 Headers

四、高级特性

1. 智能重试机制

python">import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry# 配置重试策略
retry = Retry(total=3,backoff_factor=0.5,status_forcelist=[500, 502, 503, 504]
)# 创建带重试的会话
session = requests.Session()
session.mount("https://", HTTPAdapter(max_retries=retry))try:response = session.get("https://httpbin.org/delay/5",  # 模拟慢速响应timeout=3  # 超时设置(秒))
except requests.exceptions.Timeout:print("请求超时,已重试 3 次")

参数说明

  • backoff_factor 控制重试间隔时间(如 0.5 秒→1秒→2秒)
  • status_forcelist 指定需要重试的 HTTP 状态码

2. 大文件流式下载

python"># 下载网络图片(避免内存溢出)
import requestsimage_url = "https://httpbin.org/image/png"
response = requests.get(image_url, stream=True)with open("demo_image.png", "wb") as f:for chunk in response.iter_content(chunk_size=1024):if chunk:f.write(chunk)
print("图片下载完成,文件大小:", len(response.content), "字节")

技术要点

  • stream=True 启用流式传输
  • iter_content() 分块读取响应内容

五、爬虫注意:数据隐私保护

遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私!


http://www.ppmy.cn/devtools/171370.html

相关文章

洛谷: P1443 马的遍历

原题地址:P1443 马的遍历 - 洛谷 题目描述 有一个 nm 的棋盘,在某个点 (x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。 输入格式 输入只有一行四个整数,分别为 n,m,x,y。 输出格式 一个 nm 的矩阵,代表…

html和css 实现元素顺时针旋转效果(椭圆形旋转轨迹)

一 实现效果 二 实现代码 我自己是用react写的。 1. react 代码如下&#xff1a; import React from "react"; import styles from "./index.less";export default () > {return <div className{styles.containers}><div className{styles.c…

MySQL:数据库基础

数据库基础 1.什么是数据库&#xff1f;2.为什么要学习数据库&#xff1f;3.主流的数据库&#xff08;了解&#xff09;4.服务器&#xff0c;数据库&#xff0c;表之间的关系5.数据的逻辑存储6.MYSQL架构7.存储引擎 1.什么是数据库&#xff1f; 数据库(Database,简称DB)&#x…

RabbitMQ的高级特性介绍(二)

发送方确认 当消息的⽣产者将消息发送出去之后&#xff0c;消息到底有没有正确地到达服务器呢? 如果在消息到 达服务器之前已经丢失(比如RabbitMQ重启, 那么RabbitMQ重启期间⽣产者消息投递失败), 持久化操作也解决不了这个问题&#xff0c;因为消息根本没有到达服务器&#…

物联网系统部署与运维实训室

一、引言 在数字化时代&#xff0c;物联网技术正以前所未有的速度蓬勃发展&#xff0c;广泛渗透到各个领域&#xff0c;深刻改变着人们的生活和工作方式。从智能家居、智能交通到工业自动化、医疗健康等&#xff0c;物联网的应用无处不在&#xff0c;推动着各行业的智能化变革…

“零拷贝”(Zero-Copy)技术详解以及使用场景

“零拷贝”(Zero-Copy)是一种优化数据传输效率的技术,通过减少或消除数据在内存中的复制次数,显著提高I/O操作性能。以下是使用Java代码实现的零拷贝技术示例。 Java NIO 中的零拷贝实现 1. 内存映射文件(Memory Mapped File) import java.io.IOException; import jav…

工作记录 2017-03-07

工作记录 2017-03-07 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 郝 更新的问题 1、增加了2个菜单Global Fee Category、Global Fee List。 2、增加了Global Fee Category页面。 3、增加了Global Fee List页面。 我在把邮件上的文件生成导入数据库…

硬件基础(5):(3)二极管的应用

文章目录 [toc]1. **整流电路****功能**&#xff1a;**工作原理**&#xff1a;**应用实例**&#xff1a;电路组成&#xff1a;整流过程&#xff1a;电路的应用&#xff1a; 2. **稳压电路****功能**&#xff1a;**工作原理**&#xff1a;**应用实例**&#xff1a;电路组成及功能…