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

【python 中的Session 爬取数据案例实践——突发事件预警信息发布网数据抓取】

python 中的Session 爬取数据案例实践——突发事件预警信息发布网数据抓取

在数据采集与处理的过程中,网络请求和数据存储是两个关键环节。合理使用requests.Session和上下文管理器不仅能提升代码的稳定性和效率,还能让代码结构更加清晰。本文将结合实际代码示例,详细讲解如何利用requests.Session实现带重试机制的网络请求,并通过上下文管理器优雅地管理数据库连接,完成数据从抓取到存储的全流程。

一、requests.Session的优势与应用

requests.Sessionrequests库中用于管理会话的类,它能在多次请求之间保持某些参数,如Cookies、请求头,同时可以方便地添加重试机制,提升网络请求的可靠性。

1.1 创建带重试机制的Session

session = requests.Session()
retry = Retry(total=3,  # 总重试次数backoff_factor=2,  # 重试间隔倍数status_forcelist=[429, 500, 502, 503, 504]  # 需要重试的状态码
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

上述代码通过Retry类定义了重试策略,当请求返回429(请求过多)、500(服务器内部错误)等指定状态码时,Session会自动进行重试。backoff_factor设置了重试间隔的增长倍数,例如第一次重试间隔2秒,第二次就是4秒,以此类推,避免短时间内频繁请求对目标服务器造成压力。

1.2 使用Session管理会话

# 1. 先访问首页建立基础会话
print("第一步:访问首页建立会话...")
home_url = "http://www.yn12379.cn/yn/warning/main?limit=5"
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
home_headers = {"User-Agent": user_agent,"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8","Connection": "keep-alive"
}
try:home_response = session.get(home_url, headers=home_headers, timeout=30)print(f"首页响应状态码: {home_response.status_code}")print(f"首页获取的Cookies: {session.cookies.get_dict()}")
except requests.exceptions.RequestException as e:print(f"访问首页失败: {str(e)}")return

通过先访问首页建立会话,Session会自动保存服务器返回的Cookies。后续的请求会带上这些Cookies,模拟真实的用户会话过程,对于需要登录或有状态的请求场景十分重要。

二、上下文管理器简化资源管理

上下文管理器通过with语句来管理资源的生命周期,确保资源在使用后被正确释放。在数据库连接管理中,上下文管理器能有效避免资源泄漏问题。

2.1 定义MySQL连接上下文管理器

@contextmanager
def mysql_connection(d
http://www.xdnf.cn/news/11079.html

相关文章:

  • 使用 Python 制作 GIF 动图,并打包为 EXE 可执行程序
  • Ubuntu系统安装与配置NTP时间同步服务
  • 【Harmony OS】作业五 数据存储
  • leetcode题解98:验证二叉搜索树。(中序遍历!!!BST要点!)
  • RHEL7安装教程
  • 黑马程序员TypeScript课程笔记2(11-20)
  • 供应链攻击难以防范 供应商成“安全漏洞”
  • C# CallerMemberName特性
  • JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
  • MicroROS简述
  • 中和农信如何破解小微农户融资难题
  • 【笔记】用命令手动下载并安装 tokenizers 库.whl文件(Python 3.12+)
  • CppCon 2014 学习:Return values take a ”closure” walk
  • 笔记︱数据科学领域因果推断案例集锦(第三弹)
  • 电商仓储出入库操作指引
  • 在 Dify 项目中的 Celery:异步任务的实现与集成
  • LabelMe安装踩坑
  • 异常检测 VS 监督学习
  • 谷歌地图高清卫星地图软件(Google Earth)v6.0.3.2197 中文版 - 前端工具导航
  • CppCon 2014 学习: Less Code = More Software
  • 深度学习入门——基于多层感知机的MNIST手写数字识别
  • 四、关系数据库标准语言SQL_3
  • ollama的安装及加速下载技巧
  • 凯撒密码:古典密码学的奠基者与技术解析
  • 沟通频率不合适,如何找到平衡点
  • RM-R1:基于推理任务构建奖励模型
  • 第十四天 设计一个OTA升级AB测试方案
  • 【C++11】折叠引用和完美转发
  • Leetcode 1336. 每次访问的交易次数
  • 【C/C++】公共接口调用:aaa.so: undefined reference to `GetXXX‘