Как скачивать файлы по списку ссылок - PullRequest
0 голосов
/ 19 февраля 2019

В настоящее время я изучаю webscraping и Python.Я хочу написать код, который загружает список файлов данных .xls на основе списка ссылок, которые я создал.Каждая из этих ссылок загружает файл данных, который соответствует потокам ПИИ в стране.

Моя проблема заключается в том, что при способе написания кода в настоящий момент последний 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 голосов
/ 19 февраля 2019

Это потому, что вам не нужно делать двойной цикл.Действительно, в цикле «страны» вы каждый раз перезаписываете свой файл («wb»), поэтому остаются только значения последней оставшейся страны.Чтобы решить вашу проблему, вы можете сделать цикл непосредственно в country_list

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]')

for opt in countries_list:
    value = opt.get('value')
    if value:
        link = "https://unctad.org" + value
        country = opt.get_text()
        r = requests.get(link)
        with open(country + '.xls', 'wb') as file:
            file.write(r.content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...