You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")

修复说明

  1. 去掉嵌套循环:原来的两层循环会重复写入所有国家文件,现在用zip(countries, links_complete)把国家和对应的链接绑定,每次循环只处理一对国家+链接。
  2. 添加文件目录管理:创建专门的文件夹保存下载的Excel文件,避免和其他文件混淆,也方便后续查找。
  3. 增加下载提示:打印下载完成的信息,方便你跟踪进度。

这样修改后,每个国家的文件就会对应正确的FDI流量数据,不会再出现内容覆盖的问题啦。

内容的提问来源于stack exchange,提问作者Amy D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:44:08