Парсер HTML страниц на Python | End Way - форум программирования и сливов различных скриптов

Парсер HTML страниц на Python

Добро пожаловать! Вы были приглашены VAclub присоединиться к нашему сообществу. Пожалуйста, нажмите сюда для регистрации.

onsi

Миддл
Автор темы
16 Июн 2023
20
20
Данный код производит парсинг HTML страницы, полученной по заданному URL-адресу с помощью библиотеки requests и BeautifulSoup. Затем пользователю предлагается выбрать папку для сохранения файла с помощью функции print_subfolders, которая выводит список подпапок в заданной директории. Если пользователь выбирает 0, файл сохраняется в текущей директории, иначе создается новая папка с выбранным именем или перезаписывается существующая. Затем пользователю предлагается ввести название файла для сохранения. В конце, результат сохраняется в виде HTML-файла.

Код:
import requests
from bs4 import BeautifulSoup
import urllib.parse
import os

def print_subfolders(folder_path):
    subfolders = [f.path for f in os.scandir(folder_path) if f.is_dir()]
    for i, subfolder in enumerate(subfolders):
        print(f"{i+1}. {subfolder}")

url = input("Введите URL страницы для парсинга: ")

if not urllib.parse.urlparse(url).scheme:
    url = "https://" + url

try:
    response = requests.get(url)
    response.raise_for_status()
except requests.exceptions.HTTPError as http_err:
    print(f'HTTP error occurred: {http_err}')
except Exception as err:
    print(f'Other error occurred: {err}')
else:
    soup = BeautifulSoup(response.content, 'html.parser')

    headings = soup.find_all('h1')
    for i, heading in enumerate(headings):
        print(f"{i+1}. {heading.text}")

    folders = [f for f in os.listdir('.') if os.path.isdir(f)]
    for i, folder in enumerate(folders):
        print(f"{i+1}. {folder}")

    folder_num = input("\n0. сохранить в текущую директорию\nВведите номер папки для сохранения: ")
    if folder_num == "0":
        folder_path = "."
        folder_name = ""
    else:
        folder_path = os.path.join(os.getcwd(), folders[int(folder_num)-1])
        print_subfolders(folder_path)
        folder_name = folders[int(folder_num)-1]

    file_name = input("Введите название файла для сохранения: ")

    if folder_name:
        os.makedirs(folder_name, exist_ok=True)

    with open(os.path.join(folder_path, f"{file_name}.html"), "w") as f:
        f.write(response.text)

    if folder_name:
        print(f"Файл {file_name}.html успешно сохранен в папке {folder_name}")
    else:
        print(f"Файл {file_name}.html успешно сохранен в текущей директории")
 
Like
  • 1
Реакции: 1 user

NiggaByte+REP

so black
hehe
8 Янв 2023
875
2,008
неплохое решение, а то у меня все руки не доходили такое сделать, а то я с принта и в веб виевер вставлял)))
 
Активность:
Пока что здесь никого нет