Создание скриншотов веб-страниц с помощью Python

Создание скриншотов сайта с помощью Python

Python-скрипт, который автоматизирует процесс создания скриншотов веб-страниц.

Установка библиотеки

Установим playwright:

pip install playwright

Playwright нужны браузеры для работы. Установим их так:

playwright install

Импорт библиотек

import os
from datetime import datetime
from urllib.parse import urlparse
from playwright.sync_api import sync_playwright
import time

Особое внимание стоит обратить на playwright, который мы будем использовать для управления браузером.

Функция создания скриншота

def take_screenshot(url, output_dir):
    # Извлекаем имя сайта из URL
    parsed_url = urlparse(url)
    website_name = parsed_url.netloc.split(".")[-2]

Эта функция принимает URL и директорию для сохранения. Мы используем urlparse для извлечения имени сайта из URL, что поможет нам в именовании файлов.

    # Генерируем имя файла
    file_name = website_name + ".jpg"
    counter = 1
    while os.path.exists(os.path.join(output_dir, file_name)):
        file_name = f"{website_name}{counter}.jpg"
        counter += 1

Здесь мы генерируем уникальное имя файла, добавляя счетчик, если файл с таким именем уже существует: websitename1, websitename2 и т. д.

    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page(viewport={"width": 1920, "height": 1080})
        page.goto(url)
        time.sleep(1)
        page.screenshot(path=os.path.join(output_dir, file_name), type="jpeg", quality=100)
        browser.close()

Этот блок кода использует Playwright для запуска браузера, открытия страницы и создания скриншота. Обратите внимание на установку размера скриншота viewport и паузу в 1 секунду перед созданием скриншота, что позволяет странице полностью загрузиться.

Обработка URL из txt-файла

def process_urls_from_file(file_path, output_dir):
    with open(file_path, "r") as file:
        urls = file.readlines()

    for url in urls:
        url = url.strip()
        if url:
            take_screenshot(url, output_dir)

Эта функция читает ссылки на страницы url из txt-файла и вызывает take_screenshot для каждого из них, чтобы получить скриншоты.

Создание папки для сохранения скриншотов

def create_output_directory():
    current_date = datetime.now().strftime("%d-%m-%Y")
    output_dir = current_date
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    return output_dir

Здесь мы создаем папку для сохранения скриншотов, используя текущую дату в качестве имени папки.

Запуск скрипта

file_path = "urls.txt"
output_dir = create_output_directory()
process_urls_from_file(file_path, output_dir)

file_path – путь к txt-файлу.
output_dir – создание папки со скриншотами.

Полный код

import os
from datetime import datetime
from urllib.parse import urlparse
from playwright.sync_api import sync_playwright
import time

def take_screenshot(url, output_dir):
    # Извлекаем имя сайта из URL
    parsed_url = urlparse(url)
    website_name = parsed_url.netloc.split(".")[-2]

    # Генерируем имя файла
    file_name = website_name + ".jpg"
    counter = 1
    while os.path.exists(os.path.join(output_dir, file_name)):
        file_name = f"{website_name}{counter}.jpg"
        counter += 1

    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page(viewport={"width": 1920, "height": 1080})
        page.goto(url)
        time.sleep(1)
        page.screenshot(path=os.path.join(output_dir, file_name), type="jpeg", quality=100)
        browser.close()

    print(f"Screenshot saved as {file_name}")

def process_urls_from_file(file_path, output_dir):
    with open(file_path, "r") as file:
        urls = file.readlines()

    for url in urls:
        url = url.strip()
        if url:
            take_screenshot(url, output_dir)

def create_output_directory():
    # Получаем текущую дату
    current_date = datetime.now().strftime("%d-%m-%Y")

    # Создаем имя папки с текущей датой
    output_dir = current_date

    # Создаем папку, если она не существует
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    return output_dir

# Запуск
file_path = "urls.txt"
output_dir = create_output_directory()
process_urls_from_file(file_path, output_dir)
https://website.ru/123
https://website2.ru