Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров16K

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

Сегодня я Вам расскажу про интересную библиотеку для 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)

Теги:
Хабы:
Всего голосов 8: ↑6 и ↓2+4
Комментарии11

Публикации

Истории

Работа

Python разработчик
137 вакансий
Data Scientist
61 вакансия

Ближайшие события