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

如何将循环爬取的多国家数据拼接并保存到单个文件中?

问题原因及解决方案

你的代码只保存最后一个国家数据的核心问题有两个:

  1. 数据列表被重复初始化:data = []放在了国家循环内部,每次遍历新国家时都会清空之前收集的数据,导致最终只保留最后一个国家的内容。
  2. 文件被重复覆盖写入:df.to_csv()放在了内层的领导人遍历循环里,每次处理一个领导人就会写入一次文件,前面的内容会被后续写入覆盖,而且前面国家的数据也没被累积。

修正后的代码

from bs4 import BeautifulSoup 
import requests
import pandas as pd

# 把数据列表初始化移到国家循环外,用于累积所有国家的数据
data = []
ctry_list = ["afghanistan","albania"]

for ctry in ctry_list:
    url = f"https://www.cia.gov/resources/world-leaders/foreign-governments/{ctry}"
    page = requests.get(url)
    soup = BeautifulSoup(page.content, "html.parser")
    
    # pep_list变量未用于存储,可直接移除
    for e in soup.select('.leader-info'):
        d = {
            'country': ctry,
            'title': e.h4.text,
            'first_name': ' '.join([s for s in e.p.text.split() if not s.isupper()]),
            'last_name': ' '.join([s.capitalize() for s in e.p.text.split() if s.isupper()])
        }
        # 把每个领导人的数据添加到全局的data列表中
        data.append('|'.join(d.values()))
        print('|'.join(d.values()))

# 所有数据收集完成后,统一创建DataFrame并写入文件
df = pd.DataFrame(data)
df.to_csv('output_files/FILE.txt', index=False)

可选优化:用字典存储数据(可读性更强)

如果后续需要处理数据,用字典列表存储会比字符串更灵活,修改如下:

from bs4 import BeautifulSoup 
import requests
import pandas as pd

data = []
ctry_list = ["afghanistan","albania"]

for ctry in ctry_list:
    url = f"https://www.cia.gov/resources/world-leaders/foreign-governments/{ctry}"
    page = requests.get(url)
    soup = BeautifulSoup(page.content, "html.parser")
    
    for e in soup.select('.leader-info'):
        d = {
            'country': ctry,
            'title': e.h4.text,
            'first_name': ' '.join([s for s in e.p.text.split() if not s.isupper()]),
            'last_name': ' '.join([s.capitalize() for s in e.p.text.split() if s.isupper()])
        }
        data.append(d)
        print(f"{ctry}|{d['title']}|{d['first_name']}|{d['last_name']}")

# 直接用字典列表生成DataFrame,保留列名结构
df = pd.DataFrame(data)
df.to_csv('output_files/FILE.txt', index=False, sep='|')

关键改动说明

  • 将data = []移到国家循环外部,确保所有国家的领导人数据都能被累积到同一个列表中。
  • 将文件写入操作移到整个循环结束后,避免重复覆盖文件,一次性写入所有数据。
  • 字典存储方式让数据结构更清晰,后续修改或分析数据时更方便。

内容的提问来源于stack exchange,提问作者John Al

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:27:41