当前位置: 首页 > news >正文

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

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

一、环境配置与基础验证

# 验证 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 请求原理与实现

# GET 请求参数传递
import requests

params = {"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 请求原理与实现

# 表单数据提交
import requests

form_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 的核心属性

# 文本形式
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

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 RequestsCookieJar

jar = 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 管理

# 使用 Session 对象自动管理
import requests

with requests.Session() as s:
    # 首次登录设置 Cookie
    login_data = {"user": "admin", "pass": "admin123"}
    s.post("https://httpbin.org/post", data=login_data)
    
    # 后续请求自动携带 Cookie
    response = s.get("https://httpbin.org/cookies")
    print("会话 Cookie:", response.json())

优势

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

四、高级特性

1. 智能重试机制

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. 大文件流式下载

# 下载网络图片(避免内存溢出)
import requests

image_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() 分块读取响应内容

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

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

相关文章:

  • 递归进阶(用递归改造循环11~20)(1082、1265、1395、1083、1066、1782、1783、1784、1008、1224)
  • 树的深度优先(DFS)和广度优先(BFS)算法
  • Nginx相关漏洞解析
  • Redis 版本演进及主要新特性
  • 常见框架漏洞攻略-Spring篇
  • 拓扑排序(算法基础)
  • 针对信息化软硬件设备:常用询价网站是否够用
  • 【Unity3D脚本与系统设计6】鼠标触摸超时待机实现
  • 全排列 | 下一个排列
  • CSS3学习教程,从入门到精通,CSS3 浮动与清除浮动语法知识点及案例代码(14)
  • 计算机二级:文件操作
  • C语言部分代码
  • 深入理解指针(2)(C语言版)
  • MySQL基本函数
  • UE4学习笔记 FPS游戏制作20 重写机器人和玩家死亡 切换相机和模型
  • 【leetcode hot 100 739】每日温度
  • 关系图:赋能数据可视化的动态扩展
  • 微服务中的服务发现与注册中心
  • python之网络编程
  • zabbix添加IIS网站计数器(并发连接数)
  • 谁做网站/深圳全网推广排名
  • 局域网网站制作教程/口碑营销的步骤
  • 写作兼职网站/手机百度最新正版下载
  • seo高手培训/seo快速入门教程
  • 夷陵网/百度seo怎么收费
  • 高端娱乐网站建设/aso关键词覆盖优化