尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
04-Python CSV数据保存与翻页抓取
前几篇我们学会了发请求、提取数据。但你发现没有——数据抓到了可都在 Python 变量里。程序一结束就什么都没了。这一篇解决两件事把抓下来的数据存进 CSV 文件Excel 能直接打开用循环翻页一次抓好几页的数据CSV 是什么一句话CSV 是用逗号分隔的纯文本文件Excel 能直接打开兼容性最好。书名,作者,价格 Python入门,张三,39.9 数据分析,李四,49.9每行一条数据每列之间用逗号隔开。Python 自带的csv模块就能读写不用装额外东西。方法一Python 内置 csv 模块写入基本写法importcsvwithopen(books.csv,w,encodingutf-8-sig,newline)asf:writercsv.writer(f)# 写表头writer.writerow([书名,作者,价格])# 写数据行writer.writerow([Python入门教程,张三,39.9])writer.writerow([数据分析实战,李四,49.9])两个必须注意的参数新手踩坑重灾区1.encodingutf-8-sig—— 解决 Excel 中文乱码用utf-8存记事本打开没问题但 Excel 打开中文全乱码。因为 Excel 默认用 GBK 编码打开 CSV。utf-8-sig会在文件开头加个 BOM 标记Excel 看到就知道这是 UTF-8正常显示中文。记住存 CSV 给 Excel 用编码一定写utf-8-sig。2.newline—— 解决空行问题不加的话在 Windows 上用 Excel 打开会发现每两行之间多一个空行。加上newline就好。方法二pandas 存 CSV更简单如果你装了 pandas后面数据分析肯定要用还能更简单importpandasaspd# 数据装成字典列表data[{书名:Python入门教程,作者:张三,价格:39.9},{书名:数据分析实战,作者:李四,价格:49.9},]# 转成 DataFrame存 CSVdfpd.DataFrame(data)df.to_csv(books_pandas.csv,encodingutf-8-sig,indexFalse)三行搞定。indexFalse是不让 pandas 把索引列0、1、2…也存进去。两种方法怎么选情况推荐数据量小、想少依赖csv 模块数据量大、后面还要分析pandas数据已经是字典列表pandas边抓边写csv 模块翻页抓取从 1 页到 N 页真实场景里数据很少只在一页上。排行榜 10 页、搜索结果 50 页总不能手动改 URL。怎么找分页规律打开有分页的网页点第2页看地址栏第1页https://example.com/ranking?page1 第2页https://example.com/ranking?page2 第3页https://example.com/ranking?page3规律很明显——page后面的数字就是页码。有的网站用p、pageNum思路都一样找到 URL 里变化的数字用循环变量替换它。基本写法importrequestsfrombs4importBeautifulSoupforpageinrange(1,4):# 抓第1到第3页urlfhttps://example.com/ranking?page{page}print(f正在抓取第{page}页)responserequests.get(url)soupBeautifulSoup(response.text,lxml)# ... 提取数据的代码 ...就一个for循环把页码当变量拼进 URL。搞定。完整实战抓 3 页排行榜存进 CSV把所有知识串起来来一个完整的importcsvimporttimeimportrequestsfrombs4importBeautifulSoup headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36}all_data[]forpageinrange(1,4):# 抓 3 页urlfhttps://example.com/ranking?page{page}print(f正在抓取第{page}页...)responserequests.get(url,headersheaders)ifresponse.status_code!200:print(f第{page}页请求失败状态码{response.status_code})continuesoupBeautifulSoup(response.text,lxml)# 提取数据根据实际网页结构调整选择器itemssoup.select(.ranking-item)foriteminitems:rankitem.select_one(.rank).get_text(stripTrue)titleitem.select_one(.title).get_text(stripTrue)scoreitem.select_one(.score).get_text(stripTrue)all_data.append({排名:rank,标题:title,分数:score})print(f第{page}页抓了{len(items)}条)time.sleep(1)# 每抓一页歇1秒别太快# 全部抓完存进 CSVwithopen(ranking.csv,w,encodingutf-8-sig,newline)asf:writercsv.DictWriter(f,fieldnames[排名,标题,分数])writer.writeheader()# 写表头writer.writerows(all_data)# 批量写所有数据print(f全部搞定共存了{len(all_data)}条数据到 ranking.csv)三个关键点1.csv.DictWriter数据是字典列表时用它按字段名写入不用操心列顺序。2.time.sleep(1)每抓一页歇 1 秒。请求太快对方服务器压力大可能封你 IP。既礼貌也自保。3.status_code ! 200判断某一页失败了就跳过不至于整个程序崩掉。数据采集容错很重要。真实运行效果上面这套流程用配套资源包在真实站点 books.toscrape.com 上跑一遍抓前 3 页每页 20 本3 页共 60 本书全部抓完存进data/books.csv前 5 本预览正常。翻页、容错、休眠、写入 CSV 全链路跑通。新手常见坑坑症状解决Excel 中文乱码记事本正常Excel 乱码encodingutf-8-sig每行之间空行Excel 打开多空行open 加newline字段里有逗号担心列错位用 csv 模块自动加引号处理数据里有逗号完全不用怕——csv 模块会自动给含逗号的字段加双引号读取时再自动去掉。所以别自己手动拼字符串用 csv 模块就对了。今天的重点回顾CSV 是逗号分隔的纯文本文件Excel 直接打开csv 模块是 Python 自带的writer.writerow()一行一行写编码一定写utf-8-sig不然 Excel 中文乱码open 加newline防止空行pandas 存 CSV 更简单字典列表 → DataFrame →to_csv翻页用 for 循环找到 URL 里的页码变量循环替换加time.sleep()休眠别请求太快被封到这一步你已经能独立完成一个完整的小型数据采集项目发请求 → 解析提取 → 翻页 → 存 CSV。完整可跑工程版真实站点 books.toscrape.com 抓前3页60本书存CSV在配套资源包里。下一篇讲工程化完善——超时、重试、异常捕获把爬虫从能跑变成耐造。梅雅达编程工作室 · Python数据实战系列第4篇能抓能存你已经能独立跑通一个小型采集项目了。别小看这一步很多人学很久都做不到。
RELATED

相关推荐

Windows下安装Redis的四种方式与配置排查指南

Windows下安装Redis的四种方式与配置排查指南

在Linux上装Redis,一句apt install redis-server就完事,连配置文件都不用动。到了Windows就完全是另一番景象:你去Redis官网的Download页翻一遍,Linux、macOS、Docker的安装说明都列得清清楚楚,唯独没有Windows安装包。…

📅 2026/10/2 2:20:08
批量重置文件夹时间戳:绿色小工具实测与避坑指南

批量重置文件夹时间戳:绿色小工具实测与避坑指南

上周帮同事整理共享盘,三百多个文件夹的创建时间、修改时间全乱七八糟。原因是之前从网盘批量同步过一次,同步工具把所有目录的时间戳都刷成了当天。他一开始没在意,等真正要按时间归档才发现,整个目录树完全没法看。手动右键一个…

📅 2026/10/2 2:20:08
程序员自学干货,盘点靠谱的国内编程学习平台

程序员自学干货,盘点靠谱的国内编程学习平台

因互联网技术不断持续迭代,致使IT行业岗位需求不断持续扩容, 编程技能成为程序员、职场新人以及技术从业者的核心竞争力。依据行业数据表明, 超过70%的IT从业者借助线上平台达成技能迭代与技术进阶, 与线下培训相比, 线上自学模式性价比更高且学习时间更为灵活。然而当下国内编…

📅 2026/10/2 2:15:08
MORE NEWS

更多资讯

📰

Matlab高升力螺旋桨设计:BEMT建模、几何参数化与性能验证

简介:这份资源是面向航空工程、计算机、电子信息及数学等专业学生与设计人员的Matlab高升力螺旋桨设计案例包,可用于课程设计、期末大作业、毕业设计及螺旋桨性能分析等场景。压缩包共11个文件,约735KB,包含3个m脚本文件、3个csv数…

📰

GBase 8s高可用组合架构实战:日志同步与故障切换避坑指南

不知道你在把GBase 8s的高可用方案真正落到生产环境之后,是不是也有过这种错觉:HAC、SSC、RSS这些模式都装上,集群状态看起来正常,就觉得高可用这件事已经稳了。我当初也是这么想的。直到某个周一早晨,监控大屏上一排标…

📰

Unity 3D狩猎游戏作业实战:从架构到优化的完整开发指南

简介:这份资源是一套基于Unity 3D引擎开发的第一人称狩猎游戏完整工程,面向正在学习游戏开发、需要完成课程作业或想练手3D项目实战的学生与开发者。项目以手持斧头猎杀野猪、僵尸等怪物为核心玩法,涵盖第一人称控制器、角色动画、物理碰撞、…

📰

GBase 8s内部用户创建与管理:解耦OS账号,实现数据库自主认证

做国产数据库运维这些年,GBase 8s 一直是我项目里的常客。凡是要做国产化替代、信创改造的客户,几乎都会问到同一个问题:数据库用户到底怎么建?能不能不依赖 Linux 系统账号?这正是内部用户要解决的痛点。GBase 8s 的“…

📰

Flutter RangeSlider 在 OpenHarmony 上的双滑块移植与交互定制实战

如果你最近在把 Flutter 应用往 OpenHarmony 上移植,大概率会碰到这样一个尴尬场景:产品经理要求做价格区间筛选,交互稿上是一个带两个滑块的范围滑杆。你翻原生 ArkUI 的组件清单,Slider 倒是有,但双值范围选择还真没…

📰

Redis批量删除键值对实战:从SCAN游标到Lua脚本的安全方案

折腾过 Redis 键值对清理的人应该都有同感:平时读写数据都挺顺利,一旦要按特定模式批量删除键,就开始纠结了。比如项目里出现了一大堆以user:temp:开头的脏数据,或者某次上线写错了缓存前缀,积压了几十万个cache:v1:*之…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬