
本文介绍解决网页爬虫后csv文件在excel中仅显示表头、无数据行的问题,提供更简洁可靠的pandas方案,包括直接导出excel、使用read_html自动解析表格,以及关键注意事项。
本文介绍解决网页爬虫后csv文件在excel中仅显示表头、无数据行的问题,提供更简洁可靠的pandas方案,包括直接导出excel、使用read_html自动解析表格,以及关键注意事项。
在使用 BeautifulSoup 手动解析 HTML 表格并构建 DataFrame 后,若导出的 CSV 文件在 Excel 中打开时仅显示列名而无实际数据行,通常并非数据丢失,而是以下常见原因导致的显示或导出异常:
- 编码问题:默认 UTF-8 编码的 CSV 在 Excel(尤其 Windows 版)中可能无法正确识别中文或特殊字符,导致乱码或空行;
-
换行符/不可见字符干扰:
td.text可能包含多余空白、换行符(\n)、零宽空格等,破坏 CSV 结构; -
手动构建 DataFrame 效率低且易出错:如原代码中使用
df.loc[l] = r2动态追加行,在大数据量下性能差,且易因索引错位导致空行或覆盖。
✅ 推荐解决方案:直接使用 pandas.read_html()
该方法底层已集成 HTML 解析逻辑(内部调用类似 BeautifulSoup 的机制),自动处理表头识别、单元格清洗与结构对齐,代码更简、鲁棒性更强:
诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿
import pandas as pd
# 自动抓取页面中所有匹配 'TRADING CODE' 的表格(即目标表格)
df_list = pd.read_html('https://www.dsebd.org/top_20_share.php', match='TRADING CODE')
# 保存第一个表格(通常为“Top 20 Shares by Value”)
df_list[0].to_csv("top_20_share_value.csv", index=False, encoding='utf-8-sig') # 关键:添加 utf-8-sig 防止Excel乱码
# 或直接导出为 Excel(无需额外库,pandas 依赖 openpyxl/xlsxwriter 即可)
df_list[0].to_excel("top_20_share_value.xlsx", index=False)
? 关键注意事项:
- ✅ 使用
encoding='utf-8-sig'导出 CSV:这是 Excel(Windows)正确读取中文的关键,utf-8-sig会在文件开头写入 BOM,让 Excel 识别编码; - ✅ 添加
index=False:避免导出冗余的行索引列; - ✅ 优先选用
.to_excel():规避 CSV 编码兼容性问题,支持公式、格式、多工作表; - ⚠️ 若需保留超链接(如股票代码的
<a></a>标签),read_html()默认只提取文本;此时应改用BeautifulSoup+ 显式清洗(如strip()+replace('\n',' ')),但本场景中纯数值/文本数据无需链接,read_html更优。
总结:放弃手动遍历 <tr>/<code><td> 构建 DataFrame,拥抱 <code>pandas.read_html() —— 它更简洁、健壮、可维护,并配合 utf-8-sig 编码或直接导出 Excel,即可彻底解决“Excel 看不见数据行”的困扰。










