Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Здравствуйте!
Сегодня я Вам расскажу про интересную библиотеку для 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)