Парсер HTML страниц на Python
Данный код производит парсинг 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 успешно сохранен в текущей директории")