许昌网站优化凡客诚品简介
许昌网站优化,凡客诚品简介,网页查询ip地址,环保网页设计在 Python 爬虫开发中#xff0c;将采集到的数据导出为 Excel 文件是高频需求。基础的 Excel 操作库#xff08;如 xlwt#xff09;存在行数限制、格式支持差等问题#xff0c;而 openpyxl 作为专注于 xlsx 格式的高性能库#xff0c;不仅能突破行数限制#xff0c;还支持…在 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” 的低效流程实现爬虫数据导出的全自动化、标准化。