如何根据链接列表下载文件

时间:2019-02-19 13:53:16

标签: python beautifulsoup

我目前正在学习网络抓取和Python。我想编写一个代码,根据我创建的链接列表下载.xls数据文件列表。这些链接中的每个链接都会下载与一个国家的FDI流量相对应的数据文件。

我的问题是,使用当前编写代码的方式,列表中的最后一个url替换了所有先前的文件。这些文件的名称正确,但是它们都包含列表中最后一个国家的数据。例如,我仅以数据中的最后三个国家为例。

from bs4 import BeautifulSoup 
import pandas as pd 
import requests 
import os

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]] #sample of countries
countries = [country.text for country in countries_list[203:-1]]  #sample of countries

links_complete = ["https://unctad.org" + link for link in links]

for link in links_complete:
    for country in countries:
        r=requests.get(link)
        with open (country + '.xls', 'wb') as file:
            file.write(r.content)

这使我得到了三个文件,全部以这三个国家命名,但包含最后一个国家(赞比亚)的数据。

任何人都可以帮忙吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

那是因为您不必执行两次循环。 确实,在“国家/地区”循环中,您每次都在文件('wb')上进行重写,因此只剩下最后一个国家/地区的值。 要解决您的问题,您可以直接在country_list上循环

"elif arenaComplete == True"