爬虫数据导出 Excel:openpyxl 高级用法
在 Python 爬虫开发中将采集到的数据导出为 Excel 文件是高频需求。基础的 Excel 操作库如 xlwt存在行数限制、格式支持差等问题而 openpyxl 作为专注于 xlsx 格式的高性能库不仅能突破行数限制还支持单元格样式、公式、图表等高级功能是爬虫数据导出的最优选择之一。本文将从实战角度讲解 openpyxl 的核心高级用法帮助你优雅地处理爬虫数据的 Excel 导出。一、openpyxl 核心优势相比于其他 Excel 操作库openpyxl 适配爬虫场景的核心优势支持.xlsx格式无行数限制xlwt 仅支持.xls最多 65536 行适配爬虫海量数据导出支持单元格样式字体、颜色、对齐、合并单元格、公式等可直接生成可视化的分析报表支持读写分离可增量写入数据避免内存溢出纯 Python 实现无需依赖 COM 组件跨平台兼容性好。二、环境准备首先安装 openpyxl 库bash运行pip install openpyxl三、爬虫数据导出核心高级用法1. 基础封装爬虫数据批量写入增量写入爬虫采集数据时通常是分批获取如分页爬取直接一次性写入大列表易导致内存占用过高。以下封装一个增量写入的工具类每爬取一页数据就写入 Excel降低内存消耗。python运行import openpyxl from openpyxl.styles import Font, Alignment, PatternFill from typing import List, Dict class SpiderExcelExporter: def __init__(self, file_path: str, sheet_name: str 爬虫数据): 初始化Excel导出器 :param file_path: 导出文件路径如./spider_data.xlsx :param sheet_name: 工作表名称 self.file_path file_path self.sheet_name sheet_name # 创建工作簿 self.workbook openpyxl.Workbook() # 删除默认工作表创建自定义工作表 if Sheet in self.workbook.sheetnames: self.workbook.remove(self.workbook[Sheet]) self.worksheet self.workbook.create_sheet(titlesheet_name) # 记录当前写入行号初始为1对应Excel第一行 self.current_row 1 def set_header(self, headers: List[str]): 设置表头并添加样式 :param headers: 表头列表如[标题, 链接, 发布时间] if not headers: return # 表头样式加粗、居中、浅蓝背景 header_font Font(boldTrue, size12) header_alignment Alignment(horizontalcenter, verticalcenter) header_fill PatternFill(start_colorE6F3FF, end_colorE6F3FF, fill_typesolid) # 写入表头 for col, header in enumerate(headers, start1): cell self.worksheet.cell(rowself.current_row, columncol, valueheader) cell.font header_font cell.alignment header_alignment cell.fill header_fill # 表头写入后行号1 self.current_row 1 def add_data(self, data: List[Dict]): 增量添加爬虫数据支持多条 :param data: 数据列表每个元素为字典键对应表头 if not data: return # 数据样式居中对齐 data_alignment Alignment(horizontalcenter, verticalcenter) # 遍历每条数据 for item in data: # 按表头顺序写入数据确保字典键与表头一致 for col, key in enumerate(self.worksheet[1], start1): cell_value item.get(key.value, ) # 按表头键取值无则为空 cell self.worksheet.cell(rowself.current_row, columncol, valuecell_value) cell.alignment data_alignment self.current_row 1 def auto_adjust_column_width(self): 自动调整列宽适配内容长度 for column in self.worksheet.columns: max_length 0 column_letter column[0].column_letter # 获取列字母如A、B for cell in column: try: if len(str(cell.value)) max_length: max_length len(str(cell.value)) except: pass # 列宽预留2个字符的余量 adjusted_width min(max_length 2, 50) # 限制最大列宽为50 self.worksheet.column_dimensions[column_letter].width adjusted_width def save(self): 保存Excel文件 # 自动调整列宽后保存 self.auto_adjust_column_width() self.workbook.save(self.file_path) print(f数据已导出至{self.file_path}) # #################### 用法示例 #################### if __name__ __main__: # 1. 初始化导出器 exporter SpiderExcelExporter(./article_data.xlsx, sheet_name文章数据) # 2. 设置表头 headers [标题, 链接, 发布时间, 阅读量] exporter.set_header(headers) # 3. 模拟爬虫分批获取的数据实际场景中替换为真实爬取数据 page1_data [ {标题: Python爬虫实战, 链接: https://example.com/1, 发布时间: 2026-02-01, 阅读量: 1200}, {标题: openpyxl高级用法, 链接: https://example.com/2, 发布时间: 2026-02-02, 阅读量: 800} ] page2_data [ {标题: 爬虫反爬策略, 链接: https://example.com/3, 发布时间: 2026-02-03, 阅读量: 1500}, {标题: Excel数据可视化, 链接: https://example.com/4, 发布时间: 2026-02-04, 阅读量: 950} ] # 4. 增量添加数据 exporter.add_data(page1_data) exporter.add_data(page2_data) # 5. 保存文件 exporter.save()2. 高级功能 1合并单元格适用于分类数据爬虫数据常存在分类场景如按日期 / 分类聚合合并单元格可提升 Excel 可读性python运行# 在SpiderExcelExporter类中新增方法 def merge_cells(self, start_row: int, end_row: int, start_col: int, end_col: int): 合并单元格 :param start_row: 起始行 :param end_row: 结束行 :param start_col: 起始列 :param end_col: 结束列 self.worksheet.merge_cells( start_rowstart_row, end_rowend_row, start_colstart_col, end_colend_col ) # 用法示例合并第1行第1列到第1行第4列表头合并 exporter.merge_cells(start_row1, end_row1, start_col1, end_col4) exporter.worksheet.cell(row1, column1, value2026年2月文章数据) # 合并后只需要给左上角单元格赋值3. 高级功能 2添加计算公式自动统计导出数据后可直接添加求和、平均值等公式无需手动计算python运行# 示例统计阅读量总和假设阅读量在D列数据行是2-5行 # 写入求和公式到D6单元格 exporter.worksheet.cell(row6, column4, valueSUM(D2:D5)) # 写入平均值公式到D7单元格 exporter.worksheet.cell(row7, column4, valueAVERAGE(D2:D5)) # 给公式单元格添加标注 exporter.worksheet.cell(row6, column3, value阅读量总和) exporter.worksheet.cell(row7, column3, value平均阅读量)4. 高级功能 3批量设置单元格格式数字 / 日期爬虫采集的数字、日期可能以字符串形式存储可统一设置单元格格式python运行from openpyxl.styles import numbers # 设置D列阅读量为数字格式 exporter.worksheet.column_dimensions[D].number_format numbers.FORMAT_NUMBER # 设置C列发布时间为日期格式 exporter.worksheet.column_dimensions[C].number_format numbers.FORMAT_DATE_YYYYMMDD25. 高级功能 4追加写入已有 Excel 文件若需要向已存在的 Excel 文件追加爬虫数据如定时爬取增量数据python运行def append_to_existing_file(self, file_path: str, sheet_name: str, data: List[Dict]): 追加数据到已有Excel文件 :param file_path: 已有文件路径 :param sheet_name: 工作表名称 :param data: 新增数据 # 加载已有工作簿 workbook openpyxl.load_workbook(file_path) worksheet workbook[sheet_name] if sheet_name in workbook.sheetnames else workbook.create_sheet(sheet_name) # 获取已有数据的最后一行 last_row worksheet.max_row 1 # 写入新增数据 data_alignment Alignment(horizontalcenter, verticalcenter) for item in data: for col, key in enumerate(worksheet[1], start1): cell_value item.get(key.value, ) cell worksheet.cell(rowlast_row, columncol, valuecell_value) cell.alignment data_alignment last_row 1 # 保存文件 workbook.save(file_path) # 用法示例追加数据到已有的article_data.xlsx exporter.append_to_existing_file( file_path./article_data.xlsx, sheet_name文章数据, data[{标题: 新增文章, 链接: https://example.com/5, 发布时间: 2026-02-05, 阅读量: 700}] )四、实战避坑指南内存优化爬取超 10 万条数据时避免一次性加载所有数据改用yield分批生成数据配合add_data增量写入编码问题爬虫数据中的中文需确保为utf-8编码写入前可通过str(cell_value).encode(utf-8, ignore).decode(utf-8)处理乱码性能优化关闭 Excel 的自动计算功能workbook.calculation.calc_mode manual写入完成后再开启提升大文件写入速度文件锁问题保存文件前需确保 Excel 文件未被打开否则会抛出权限异常。五、总结openpyxl 的高级用法能让爬虫数据的 Excel 导出从 “简单存储” 升级为 “可视化报表”核心要点增量写入 自动列宽调整适配爬虫海量数据导出兼顾性能与可读性样式设置、合并单元格、公式计算可直接生成可分析的 Excel 报表支持追加写入已有文件适配定时爬取、增量更新的场景。掌握这些用法后你可以摆脱 “爬取数据→手动整理 Excel” 的低效流程实现爬虫数据导出的全自动化、标准化。

相关新闻

MongoDB 存储非结构化爬虫数据最佳实践

MongoDB 存储非结构化爬虫数据最佳实践

一、前言 在网络爬虫场景中,爬取的数据普遍具备非结构化、字段不固定、结构易变等特征,传统关系型数据库需要预先定义表结构,难以适配这类灵活数据的存储需求。MongoDB 作为面向文档的 NoSQL 数据库,以 BSON 格式存储、支持动态 …

2026/7/4 23:50:03 阅读更多 →
BrowserStack深度解析

BrowserStack深度解析

# 从Web测试专家视角,全面解析BrowserStack 在当今多设备、多浏览器的互联网环境中,确保网站或应用在所有用户端都能正常工作,是一项巨大挑战。这就好比一家连锁餐厅,需要确保在纽约、东京、巴黎等不同城市的门店,提供…

2026/7/4 2:55:47 阅读更多 →
基于SSM的Evol之家流浪动物领养系统[SSM]-计算机毕业设计源码+LW文档

基于SSM的Evol之家流浪动物领养系统[SSM]-计算机毕业设计源码+LW文档

摘要:随着流浪动物数量的不断增加,流浪动物领养管理面临着诸多挑战。为了提高Evol之家流浪动物领养的管理效率和服务质量,本文设计并实现了基于SSM(SpringSpringMVCMyBatis)框架的流浪动物领养系统。该系统涵盖了系统用…

2026/5/17 0:53:05 阅读更多 →

最新新闻

5分钟掌握B站视频下载工具:轻松保存大会员4K和充电专属视频

5分钟掌握B站视频下载工具:轻松保存大会员4K和充电专属视频

5分钟掌握B站视频下载工具:轻松保存大会员4K和充电专属视频 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾经在B…

2026/7/4 23:53:28 阅读更多 →
UNet/UNet++实战:从零构建多类别分割数据管道与模型训练

UNet/UNet++实战:从零构建多类别分割数据管道与模型训练

1. 多类别分割任务入门指南第一次接触图像分割任务时,我完全被那些专业术语搞晕了。简单来说,多类别分割就是让计算机识别图片中不同类别的物体,并用不同颜色标记出来。比如在医疗影像中,我们可能需要同时识别肝脏、肾脏和脾脏&am…

2026/7/4 23:49:25 阅读更多 →
手机号找回QQ号码的完整指南:3步解决账号遗忘难题

手机号找回QQ号码的完整指南:3步解决账号遗忘难题

手机号找回QQ号码的完整指南:3步解决账号遗忘难题 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾经因为忘记QQ号码而无法登录微信、QQ邮箱或其他重要应用?或者需要验证某个手机号是否关联了QQ账号&a…

2026/7/4 23:47:25 阅读更多 →
博士生AI工具选择:稳定性与学术工作流才是核心

博士生AI工具选择:稳定性与学术工作流才是核心

1. 博士生AI工具选择的本质:不是选模型,而是选工作流稳定性与学术生产力杠杆理工科博士生在2026年3月这个时间点,面对Claude Pro和GPT Plus的二选一,真正要回答的问题从来不是“哪个模型参数更强”,而是“哪个工具能让…

2026/7/4 23:47:25 阅读更多 →
前端应用的离线暂停更新策略:从原理到实践

前端应用的离线暂停更新策略:从原理到实践

一、 引言:为什么需要离线暂停更新策略?在当今追求极致用户体验的前端开发中,应用的更新与部署方式直接影响用户感知。传统的强制刷新或静默更新策略,在用户进行关键操作时(如填写长表单、观看视频、进行交易&#xff…

2026/7/4 23:45:23 阅读更多 →
Python实现自动驾驶后视镜折叠图像增强技术

Python实现自动驾驶后视镜折叠图像增强技术

1. 后视镜折叠增强功能解析这个Python脚本实现了一个名为"后视镜折叠"的图像增强功能,主要用于自动驾驶或辅助驾驶系统中的视觉数据处理。核心功能是通过在车辆两侧添加粉色色块来模拟后视镜折叠的效果,从而增强模型对后视镜折叠场景的识别能力…

2026/7/4 23:45:23 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻