Как скачать файл со страницы, используя python - PullRequest
0 голосов
/ 04 сентября 2018

У меня проблемы с загрузкой txt-файла с этой страницы: https://www.ceps.cz/en/all-data#RegulationEnergy (когда вы прокручиваете страницу вниз и видите Download: txt, xls и xml).

Моя цель - создать скребок, который будет переходить на связанную страницу, например, нажимать на ссылку txt и сохранять загруженный файл.

Основные проблемы, которые я не знаю, как решить:

  • В файле нет реальной ссылки, по которой я могу позвонить и загрузить ее, но ссылка создается с помощью JS на основе фильтров и типа файла.

  • Когда я использую библиотеку requests для python и вызываю ссылку со всеми заголовками, она просто перенаправляет меня на https://www.ceps.cz/en/all-data.

Подходы пробовали:

  • Использование скребка, такого как ParseHub, для загрузки ссылки не работает должным образом. Но этот скребок был ближе всего к тому, что я хотел получить.

  • Использовал библиотеку requests для подключения к ссылке, используя заголовки, которые HXR-запрос использует для загрузки файла, но он просто перенаправляет меня на https://www.ceps.cz/en/all-data.

Если вы могли бы предложить какое-то решение для этой задачи, заранее спасибо. : -)

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы должны сделать так:

import requests

txt_format = 'txt'
xls_format = 'xls' # open in binary mode
xml_format = 'xlm' # open in binary mode

def download(file_type):
    url = f'https://www.ceps.cz/download-data/?format={txt_format}'

    response = requests.get(url)

    if file_type is txt_format:
        with open(f'file.{file_type}', 'w') as file:
            file.write(response.text)
    else:
        with open(f'file.{file_type}', 'wb') as file:
            file.write(response.content)

download(txt_format)
0 голосов
/ 04 сентября 2018

Вы можете загрузить эти данные в каталог по вашему выбору с Selenium; вам просто нужно указать каталог, в который будут сохраняться данные. Ниже я сохраню данные txt на рабочем столе:

from selenium import webdriver

download_dir = '/Users/doug/Desktop/'

chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : download_dir}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.ceps.cz/en/all-data')

container = driver.find_element_by_class_name('download-graph-data')
button = container.find_element_by_tag_name('li')
button.click()
...