网页爬取数据转CSV后Excel仅显列标题无数据的解决方法
问题
使用以下Python爬虫代码爬取https://www.dsebd.org/top_20_share.php的数据并保存为CSV文件后,用Excel打开仅能看到列标题,无法显示数据行:
url ="https://www.dsebd.org/top_20_share.php" r = requests.get(url) soup = BeautifulSoup(r.text,"lxml") table = soup.find("table", class_="table table-bordered background-white shares-table") top = table.find_all("th") header = [] for x in top: ele = x.text header.append(ele) df = pd.DataFrame(columns= header) print(df) row1 = table.find_all("tr") row2 = [] for r1 in row1[1:]: ftd = r1.find_all("td")[1].find("a", class_="ab1").text.strip() data = r1.find_all("td")[1:] r2 = [ele.text for ele in data] r2.insert(0, ftd) l = len(df) df.loc[l] = r2 print(df) df.to_csv("top_20_share_value_22.csv")
解决方案
1. 修复爬虫代码逻辑
核心问题是数据列数与表头列数不匹配,导致Pandas未写入数据行:
- 代码中
data = r1.find_all("td")[1:]已经包含了股票名称所在的第二个td,之后又执行r2.insert(0, ftd)重复插入了一次股票名称,使得数据列数比表头多1列,Pandas无法匹配,最终只写入表头。
修改后的代码片段:
for r1 in row1[1:]: data = r1.find_all("td")[1:] r2 = [ele.text.strip() for ele in data] # 统一清理单元格空白字符 df.loc[len(df)] = r2
重新运行代码生成新的CSV文件。
2. 用Excel正确导入CSV
如果确认CSV文件已有数据但直接打开看不到,改用导入方式:
- 打开Excel,切换到「数据」选项卡
- 点击「自文本/CSV」,选择目标CSV文件
- 在导入界面确认分隔符为逗号,预览数据无误后点击「加载」
内容的提问来源于stack exchange,提问作者Zaman
相关产品推荐
相关产品推荐

