Скачивание любого сайта с помощью Python себе на компьютер

от автора

Здравствуйте!

Сегодня я Вам расскажу про интересную библиотеку для Python под названием Pywebcopy.

​PyWebCopy – бесплатный инструмент для копирования отдельных веб-страниц или же полного копирования сайта на жесткий диск.

Модуль обладает такими полезными методами как:

  • save_webpage() — для сохранения одной страницы;

  • save_website() — позволяет копировать сайт целиком.

Как предупреждают разработчики используйте save_website() аккуратно, т.к метод отправляет множество запросов, что может повлечь за собой значительную нагрузку на сервер.

Итак, не будем тянуть и приступим к коду. Сначала скачаем необходимые библиотеки:

pip install pywebcopy
pip install validators

Теперь приступаем к написанию скрипта. Для начала импортируем заранее установленные библиотеки:

from pywebcopy import save_webpage, save_website import validators

Теперь напишем блоки, которые будут скачивать весь веб-сайт или его отдельную страницу:

def webpage(url, folder, name): save_webpage( url=url, project_folder=folder, project_name=name, bypass_robots=True, debug=True, open_in_browser=True, delay=None, threaded=False, )  def website(url, folder, name): save_website( url=url, project_folder=folder, project_name=name, bypass_robots=True, debug=True, open_in_browser=True, delay=None, threaded=False,   )

Блок webpage скачивает отдельную страницу сайта по ссылке url в папку folder и называет папку с сайтом name. Блок website скачивает весь сайт, а не его отдельную страницу.

Теперь напишем блок, который будет выводить текст красного цвета в терминал, для вывода ошибок.

def warning(text): print("\033[1m\033[31m{}\033[0m".format(text))

Теперь соединяем всё это вместе:

print("""Выберите цифру: 1 - Сохранить страницу 2 - Сохранить сайт""") b=False  while b==False: try: a = int(input()) if a==1 or a==2: b=True else: warning("Выберите корректный номер!") except: warning("Только цифры!")  c=False while c==False: url = input("Введите ссылку: ") if validators.url(url): c=True else: warning("Некорректная ссылка!")  folder=input("Куда сохранять: ") name=input("Название проекта: ") if a==1: webpage(url, folder, name) else: website(url, folder, name)

В этом куске кода мы просим пользователя выбрать один из вариантов, или скачать весь сайт или только одну его страницу. Потом делаем проверку того, что пользователь ввел цифру, и что это число равно 1 либо 2. Потом с помощью библиотеки validators проверяем корректность введённой пользователем ссылки, если такая ссылка существует, то просим пользователя ввести путь к папке в которую будет сохранен сайт. А потом просим ввести название проекта. После чего, если все данные введены верно, то начинается закачка сайта на Ваш компьютер.

Ну вроде бы всё. Теперь Вы можете скачивать любой сайт к себе на компьютер. Но будьте окуратны с этим скриптом, так как если попытаться скачать весь сайт YouTube, то комп просто ляжет от огромного размера данных. Удачи!

Вот весь исходный код данного скрипта:

from pywebcopy import save_webpage, save_website import validators  def warning(text): print("\033[1m\033[31m{}\033[0m".format(text))  def webpage(url, folder, name): save_webpage( url=url, project_folder=folder, project_name=name, bypass_robots=True, debug=True, open_in_browser=True, delay=None, threaded=False, )  def website(url, folder, name): save_website( url=url, project_folder=folder, project_name=name, bypass_robots=True, debug=True, open_in_browser=True, delay=None, threaded=False, )  print("""Выберите цифру: 1 - Сохранить страницу 2 - Сохранить сайт""") b=False  while b==False: try: a = int(input()) if a==1 or a==2: b=True else: warning("Выберите корректный номер!") except: warning("Только цифры!")  c=False while c==False: url = input("Введите ссылку: ") if validators.url(url): c=True else: warning("Некорректная ссылка!")  folder=input("Куда сохранять: ") name=input("Название проекта: ") if a==1: webpage(url, folder, name) else: website(url, folder, name)


ссылка на оригинал статьи https://habr.com/ru/post/669766/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *