Привіт!

Сьогодні ми розповімо вам про цікаву бібліотеку для 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,
  )

Блок веб-сторінок завантажує окрему сторінку сайту з 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. Потім, використовуючи бібліотеку валідаторів, перевіряємо правильність введеного користувачем посилання, якщо таке посилання існує, потім просимо користувача ввести шлях до папки, в якій буде зберігатися сайт. А потім, будь ласка, введіть назву проекту. Після цього, якщо всі дані введені правильно, то починається завантаження сайту на ваш комп’ютер.

Ну, це, здається, все. Тепер ви можете завантажити будь-який сайт на свій комп’ютер. Але будьте обережні з цим скриптом, адже якщо ви спробуєте завантажити весь сайт 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)