Как я могу загрузить файл из Интернета, используя python? (без URL) - PullRequest
0 голосов
/ 21 июня 2020

Я новичок ie пытаюсь извлечь файлы с этой веб-страницы http://www.cnmv.es/ipps/ (информация об испанских sh компаниях)

Проблема в том, что мне нужно заполнить сначала несколько полей (компания, семестр, год), а затем нажмите на загрузку. Используя браузер, он начинает загрузку файла .zip, который содержит один или несколько файлов .xbrl, но я не могу найти способ сделать это в python через запросы или аналогичные (в кнопке загрузки нет URL-адреса ), получая содержимое файла в переменной и сохраняя файл по пути.

То, что я пробовал, - это то, что я мог найти в Интернете о похожих проблемах, я читал кое-что о ajax, json, beautifulsoup ... но безрезультатно. Мой настоящий сценарий неверен, потому что единственное, что я получаю, это ответ, но не целевой файл, и мне нужна ваша помощь, пожалуйста.

Здесь вы можете найти черновик того, что я имею в виду, это похоже на мой настоящий сценарий.


from requests import Session

s = Session()

Company = [''] #Companies string array
Semester = [''] #Semester string array
Year = [''] #Years string array

for x in range(Company):
    for y in range(Semester):
        for z in range(Year):
            
            #request the data and receive the desired information
            response = s.post(
                url='http://www.cnmv.es/ipps/',
                data = {
                    'wDescargas$drpEntidades': Company[x], #search parameters
                    'wDescargas$drpPeriodos': Semester[y],
                    'wDescargas$drpEjercicios': Year[z])
                },

                headers={
                    'Referer': 'http://www.cnmv.es/ipps/',
                }
            )

            #save the content of the target file in a path

            data = response.content
            filename = Semester[y] + Company[x] + Year[z]

            with open(filename,'w+b') as s:
                s.write(data)

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 21 июня 2020

Я бы посоветовал вам использовать пакет selenium в Python3 для автоматизации всего процесса, потому что этот сайт использует структуру. NET и существует множество значений POST, кроме 'wDescargas $ drpEntidades', 'wDescargas $ drpPeriodos ',' wDescargas $ drpEjerci cios '...

Просто проверьте исходный код этого веб-сайта, и вы поймете, почему использование пакета запросов здесь не лучший выбор ...

<form name="form1" method="post" action="./" id="form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="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" />
...