
本文讲解如何解决网页爬虫后csv文件在excel中仅显示表头、无数据行的问题,提供更简洁可靠的pandas方案,并支持一键导出为excel格式。
本文讲解如何解决网页爬虫后csv文件在excel中仅显示表头、无数据行的问题,提供更简洁可靠的pandas方案,并支持一键导出为excel格式。
在使用 BeautifulSoup 手动解析 HTML 表格并构建 DataFrame 后,你可能遇到 df.to_csv() 生成的 CSV 文件在 Excel 中打开时“只显示列名、没有数据行”的现象。这通常并非数据丢失,而是由以下常见原因导致:
- CSV 文件编码问题(如未指定 UTF-8 BOM,Excel 在 Windows 下默认用 ANSI 打开,中文乱码或识别失败);
- CSV 内容含特殊字符(如换行符、逗号、引号)未被正确转义,破坏 Excel 的列解析逻辑;
- 手动构造 DataFrame 时索引或赋值逻辑存在边界错误(例如
df.loc[l] = r2在空 DataFrame 中可能因索引不连续或类型不匹配而静默失败)。
✅ 推荐解决方案:放弃手动解析,改用 pandas.read_html() —— 更健壮、更简洁、原生支持多表提取。
import pandas as pd
# 自动解析网页中所有符合规则的表格(底层已集成 BeautifulSoup)
df_list = pd.read_html(
'https://www.dsebd.org/top_20_share.php',
match='TRADING CODE', # 根据表头关键词精准定位目标表格
header=0 # 指定首行为列名(可选,增强鲁棒性)
)
# 通常第一个表格即所需数据
df = df_list[0]
# ✅ 导出为 CSV(添加 encoding='utf-8-sig' 确保 Excel 正确识别中文)
df.to_csv("top_20_share_value_22.csv", index=False, encoding='utf-8-sig')
# ✅ 或直接导出为 Excel(无需额外依赖 openpyxl/xlsxwriter 即可写入 .xlsx)
df.to_excel("top_20_share_value_22.xlsx", index=False)? 小贴士:
pd.read_html()返回的是list[pd.DataFrame]。该页面实际包含 3 个结构相似的表格(如成交量、成交额、涨跌幅 Top 20),可通过len(df_list)查看数量,用pd.concat(df_list, ignore_index=True)合并全部。
Excel XLSX Formula Cleanup下载诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿
⚠️ 若仍需手动解析,请务必检查:
-
df.loc[l] = r2前确认r2长度与header列数严格一致; - 使用
df = pd.DataFrame(columns=header)后,建议改用df = pd.concat([df, pd.DataFrame([r2], columns=header)], ignore_index=True)追加行,避免.loc赋值异常; - 输出 CSV 时强制指定
encoding='utf-8-sig'(Windows Excel 友好)。
最终,双击生成的 .xlsx 文件即可在 Excel 中完整、规范地查看所有行数据——无需额外设置,真正“开箱即用”。


















