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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру 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)

Источник: https://habr.com/ru/post/669766/


Интересные статьи

Интересные статьи

Статья поможет новичкам понять как работать с хуками, а также будет полезна и опытным разработчикам. Этой статьей открываю серию статей про хуки.Использование хуков с одной стороны позволяет использов...
На момент написания этой статьи в компании Cardsmobile, которая разрабатывает мобильное приложение «Кошелёк», работает 195 человек: 8 аналитиков и 187 потенциальных заказчиков аналитиков....
Привет! Меня зовут Александр Никишин, я занимаюсь разработкой iOS-приложений в компании Badoo. В статье я расскажу о том, как мы исследовали баг в UIKit, который Apple не хотела испра...
Alpine Linux — часто рекомендованный как базовый образ для Docker`а. Вам говорят, что использование Alpine сделает ваши билды меньше, а процесс сборки быстрей. Но если вы используете Alpin...
Вчера мы опубликовали первый выпуск в цикле «Кем работать в ИТ». Для него я поговорил с двумя бывшими студентами и деканом факультета Python в GeekBrains. Когда я «смонтировал» рассказы в одн...