Задать вопрос
@RG2

Как заставить код скачивать все документы с сайта?

В общем, я написал код, который должен скачивать с сайта rfbr.ru все документы всех форматов. Поначалу, когда я написал, возникали ошибки. Я дополнил. И теперь у меня проблема: код не скачивает, а просто выводит в консоль "err. conn: *такой-то документ*".
import re
import time
import twilio
from urllib.parse import quote, unquote
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry 
import requests
import os
from bs4 import BeautifulSoup
 
def main():
    base_url = 'https://www.rfbr.ru'
    download_links = set()
    response = requests.get(base_url+'/rffi')
    parse_text = BeautifulSoup(response.text, 'html.parser')
    links = set([x.get('href') for x in parse_text.find_all(href=re.compile('^/rffi/'))])
    for link in links:
        time.sleep(1)
        response = requests.get(base_url+link)
        parse_text = BeautifulSoup(response.text, 'html.parser')
        download_links.update(set([x.get('href') for x in parse_text.find_all(href=re.compile('^/rffi/getimage/'))]))
 
    for link in download_links:
        if link:
            time.sleep(1)
            file_name = unquote(link).rsplit('/', 1)[-1]
            response = requests.get(base_url+quote(link))
            try:
                response = requests.get(file_name, timeout=20)
            except:
                print(f"err. conn: {file_name}")
                continue
            if response.status_code == 200:
                try:
                    os.makedirs(os.path.dirname(file_name), exist_ok=True)
                except:
                    raise
                try:
                    with open(file_name, 'wb') as f:
                        f.write(response.content)
                except:
                    print(f"Ошибка при создании файла\nТег: {link}")
                    raise
            else:
                print(f"{file_name} no response")
 
 
if __name__ == '__main__':
    main()

Где я допустил ошибку? Какую функцию или какой оператор нужно добавить, чтобы заставить код скачивать файлы?
  • Вопрос задан
  • 117 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
В этом виновато ваше безответственное отношение к обработке исключений, а именно
try:
                response = requests.get(file_name, timeout=20)
            except:
                print(f"err. conn: {file_name}")
                continue

Это означает: если любая ошибка, закрываем на это глаза, печатаем, что у вас печатается, и продолжаем.

Вот оно печатает и продолжает.
Вам надо разобраться, какую же оно теперь возвращает ошибку в теле try, и исправить её или правильно её обрабатывать.
Ответ написан
@kalapanga
Не заменяйте исходное сообщение об ошибке на своё - выводите оригинал. Если уж хотите, то к нему ещё и своё что-то добавьте.
А так, забанили Ваc там наверное за парсинги.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы