如何将JupyterLab中爬取的pandas数据表批量导出到Excel
大规模爬取场景下JupyterLab数据表导出Excel最优方案
直接用Python代码导出就行,别折腾Get Data类的GUI功能,后者完全不适配批量爬取场景,没法自动化、操作冗余、可控性还差。
前置说明
你现在用pd.read_html()爬回来的不是单个数据表,是4个DataFrame组成的列表,直接调导出方法肯定报错,先装必要依赖,Jupyter单元格里跑下面的命令就行:
pip install pandas openpyxl
openpyxl是pandas写xlsx文件的默认引擎,不装会直接报依赖错误。
两种常用导出写法
场景1:多表存入同一个Excel的不同工作表
这是单页爬多表最常用的存法,每个爬下来的表单独占一个sheet,数据不会混:
import pandas as pd # 原有爬取逻辑 table_list = pd.read_html('https://www.basketball-reference.com/international/players/roko-prkacin-1.html')[0:4] # 改成你自己想存的文件路径 save_path = "球员数据多表.xlsx" with pd.ExcelWriter(save_path, engine='openpyxl') as writer: for idx, df in enumerate(table_list): # 可以自定义sheet命名规则,这里按爬取顺序命名 df.to_excel(writer, sheet_name=f"表{idx+1}", index=False)
要是批量爬上百个球员页面,直接给这段逻辑套个外层循环,每爬完一个页面就按规则写进Excel,全程不用碰鼠标,代码跑完文件就自动生成好了。
场景2:多表合并成一个总表导出
要是需要把所有表拼到一起做分析,先合并再导出就行:
# 纵向拼合所有表,丢掉原表自带的行索引 total_df = pd.concat(table_list, ignore_index=True) total_df.to_excel("球员数据总表.xlsx", index=False, engine='openpyxl')
不推荐GUI导出的核心原因
- 批量场景效率极低:导1、2个表手动点选确实快,但爬几十上百页的时候,要重复选变量、选路径、点确认,全是无效重复劳动,而且没法嵌到爬取流水线里,爬一半还要停下来手动导数据,完全做不到自动化。
- 容易损坏数据格式:GUI预览大表经常卡顿,还会自动篡改数据格式,比如把球员编号、赛季年份这类字段自动转成数值,丢前置0之类的问题非常常见。代码导出可以自己定字段类型、导出范围,不会出这种幺蛾子。
- 人为失误率高:手动点选操作很容易漏选表、选错保存路径,代码逻辑调通一次之后每次跑结果都一致,不会犯低级错误。
入门容易踩的坑提醒
- 导出的时候一定要加
index=False,不然pandas会把默认生成的行号单独存成一列,平白多一列没用的序号。 - 爬的数据量特别大的时候,别等所有数据都加载到内存里再导出,每爬十几页就写一次文件,不然内存占满Jupyter直接崩溃,之前爬的内容全白给。
- 要是需要保留合并单元格、特殊字体这类格式,基于openpyxl也能自定义写入规则,灵活度比GUI高太多。
内容的提问来源于stack exchange,提问作者TNieland
相关产品推荐
相关产品推荐

