@Rushpil

Как скачать файлы с сайта?

Есть сайт :https://analytic.nalog.ru/portal/analytical_inform... с него в разделе "Налоговые паспорта" нужно за определенный период скачать информацию по определенному субъекту РФ. Как это сделать, если ссылка на скачивание указана в виде href="javascript:load_ai('1268')" ? Скачать нужно с помощью python.
  • Вопрос задан
  • 801 просмотр
Решения вопроса 1
ri_gilfanov
@ri_gilfanov
Web- and desktop-developer
Ну вот эта функция, что возвращает ссылку для загрузки файл:
function load_ai(id){
	$.post('GetBLOB.htm', {
		ID : id,
		TABLE: "T_ANALYTICAL_INFORMATION"		
	}, function(data) {
		window.location.href=data;
	});
}

Полный url для HTTP запрос с POST параметрами:
https://analytic.nalog.ru/portal/GetBLOB.htm

Пробуем сделать загрузку одного файла с помощью Python библиотеки requests:
import requests

data = {
    'ID': 1,
    'TABLE': 'T_ANALYTICAL_INFORMATION',
}
load_url = 'https://analytic.nalog.ru/portal/GetBLOB.htm'
response = requests.post(load_url, data, verify=False)
file_name = response.text.replace('files/', '')
file_url = 'https://analytic.nalog.ru/portal/files/{}'.format(file_name)
response = requests.get(file_url, verify=False)
with open(file_name, 'wb') as file:
    file.write(response.content)

Список документов вроде подгружается на страницу с помощью JavaScript, но так как документов немного (не более 136) можно как-то так:
import requests

for i in range(200):
    try:
        data = {
            'ID': i,
            'TABLE': 'T_ANALYTICAL_INFORMATION',
        }
        load_url = 'https://analytic.nalog.ru/portal/GetBLOB.htm'
        response = requests.post(load_url, data, verify=False)
        file_name = response.text.replace('files/', '')
        file_url = 'https://analytic.nalog.ru/portal/files/{}'.format(file_name)
        response = requests.get(file_url, verify=False)
        with open(file_name, 'wb') as file:
            file.write(response.content)
    except Exception as error:
        print(type(error), error)

Если надо не угадывать ID методом тыка, а получить валидный список, можно посмотреть в сторону Selenium. С помощью Selenium можно получить контент веб-страницы, генерируемый через JavaScript.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Я бы зашел на сайт и посмотрел что вызывается при клике на этот линк

F12 если что в браузере

Потом автоматизируете получение этих адресов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы