Python爬虫下载FDI数据文件时内容被覆盖问题求助
问题分析与修复方案
你的问题出在嵌套循环的逻辑错误上:外层遍历每个国家的下载链接,内层又遍历所有国家名称,这就导致每个链接对应的内容会被写入所有国家的文件中。最后一个链接(赞比亚的)会覆盖之前所有国家的文件,所以所有文件内容都是赞比亚的数据。
修复后的代码
我们需要把国家名称和对应的下载链接一一配对,用zip()函数同时遍历两个列表,这样每个国家只会写入对应链接的内容:
from bs4 import BeautifulSoup import pandas as pd import requests import os # 创建保存文件的文件夹,避免文件杂乱 save_dir = "FDI_Excel_Files" if not os.path.exists(save_dir): os.makedirs(save_dir) page = requests.get("https://unctad.org/en/Pages/DIAE/FDI%20Statistics/FDI-Statistics-Bilateral.aspx") soup = BeautifulSoup(page.text, 'html.parser') countries_list = soup.select('[id=FDIcountriesxls] option[value]') # 取指定范围的国家和对应链接 links = [link.get('value') for link in countries_list[203:-1]] countries = [country.text for country in countries_list[203:-1]] links_complete = ["https://unctad.org" + link for link in links] # 关键修复:用zip同时遍历国家和对应的链接,一一对应 for country, link in zip(countries, links_complete): # 发送请求获取文件内容 r = requests.get(link) # 拼接保存路径,把文件放到指定文件夹 file_path = os.path.join(save_dir, f"{country}.xls") with open(file_path, 'wb') as file: file.write(r.content) print(f"已成功下载:{country}.xls")
修复说明
- 去掉嵌套循环:原来的两层循环会重复写入所有国家文件,现在用
zip(countries, links_complete)把国家和对应的链接绑定,每次循环只处理一对国家+链接。 - 添加文件目录管理:创建专门的文件夹保存下载的Excel文件,避免和其他文件混淆,也方便后续查找。
- 增加下载提示:打印下载完成的信息,方便你跟踪进度。
这样修改后,每个国家的文件就会对应正确的FDI流量数据,不会再出现内容覆盖的问题啦。
内容的提问来源于stack exchange,提问作者Amy D
相关产品推荐
相关产品推荐

