Ниже приведён один из вариантов реализации требуемой программы. В комментариях подробно описан каждый шаг решения. Обратите внимание, что для веб-запросов используется библиотека requests, для работы с базой данных – sqlite3, для копирования файлов – модуль shutil, а для создания графического окна – tkinter. Также используется модуль re для поиска ссылок в HTML-коде. Выполните установку requests (pip install ...
import os
import shutil
import sqlite3
import re
import tkinter as tk
from tkinter import messagebox
import requests
def backupatabase():
Определяем путь к исходному файлу базы данных (iniciativa.bd) – он лежит в той же папке, что и скрипт.
srcb = os.path.join(os.getcwd(), iniciativa.bd)
Папка для резервной копии – database. Если её нет, то создаём.
backupolder = os.path.join(os.getcwd(), database)
if not os.path.exists(backupolder):
os.makedirs(backupolder)
Путь для резервной копии
dstfolder, iniciativaackup.bd)
try:
shutil.copy(srcdb)
print(Резервная копия базы данных создана:, dstb)
except Exception as e:
print(Ошибка при создании резервной копии:, e)
raise
def clearable():
try:
Подключаемся к базе данных.
con = sqlite3.connect(os.path.join(os.getcwd(), iniciativa.bd))
cur = con.cursor()
Выполняем запрос на удаление всех записей из таблицы beests.
cur.execute(DELETE FROM beests;)
con.commit()
cur.close()
con.close()
print(Таблица beests очищена от данных.)
except Exception as e:
print(Ошибка при очистке таблицы:, e)
raise
def fetchcontent(url):
try:
response = requests.get(url)
response.encoding = utf-8 # Явно задаем кодировку, если требуется
if response.statusode == 200:
print(Содержимое сайта успешно получено.)
return response.text
else:
print(Ошибка HTTP:, response.statusode)
return
except Exception as e:
print(Ошибка при обращении к сайту:, e)
return
def extractcontent):
Определяем строку начала и окончания фрагмента.
startlg-3xs-1 listdiv class=first-letter
list-group col-24 id=а data-letter=а div class=list-group_rapperа/div/div)
endarker = scriptdocument.addEventListener(DOMContentLoaded, () = indexShowLetters([]));/script
Ищем фрагмент между startmarker.
patternmarker) + r(.*?) + re.escape(endarker)
fragmentfragment, siteontent, re.DOTALL)
if not fragmentatch:
print(Не удалось найти фрагмент между указанными участками кода.)
return # генератор не выдаст значений
fragment = fragmentatch.group(1)
Предполагаем, что в этом фрагменте находятся ссылки в тегах a href=....
Регулярное выражение для поиска адресов ссылок.
linkattern = ra\s+href=([^]+)
links = re.findall(linkattern, fragment)
if not links:
print(Ссылки в найденном фрагменте не обнаружены.)
Используем генератор для выдачи результатов по одной строке за раз.
for link in links:
print(Найдена ссылка:, link)
yield link
def onclick():
try:
Шаг 1: Создаем резервную копию базы данных.
backupatabase()
Шаг 2: Очищаем таблицу beests.
clearable()
Шаг 3: Получаем содержимое сайта.
Задайте URL сайта, который необходимо просмотреть.
siterl = http://example.com # Измените на нужный адрес
sitesiteurl)
if not siteontent:
messagebox.showerror(Ошибка, Не удалось получить содержимое сайта.)
return
Шаг 4: Извлекаем ссылки между заданными участками кода.
linklinks(siteontent)
Если ссылок нет, завершаем работу.
try:
firstgenerator)
except StopIteration:
messagebox.showinfo(Результат, Ссылки не найдены.)
return
Организуем цикл обработки ссылок по одной.
В каждой итерации ссылки сохраняется в переменной entry для дальнейшей работы.
def processlink(linken):
try:
Получаем следующую ссылку.
entry = next(linken)
Здесь вы можете запускать с entry необходимые Вам действия.
Для демонстрации выведем её в специальном окне.
messagebox.showinfo(Обработка, fОбрабатываем ссылку:\n{entry})
После завершения действий вызываем обработку следующей ссылки.
processlink(linken)
except StopIteration:
messagebox.showinfo(Завершено, Обработка всех ссылок завершена.)
Обработка первой найденной ссылки.
Если требуется, можно сначала обработать firstink отдельно.
messagebox.showinfo(Обработка, fОбрабатываем ссылку:\n{firstink})
Продолжаем обработку остальных ссылок.
processlink(linkenerator)
except Exception as e:
messagebox.showerror(Ошибка, fПроизошла ошибка: {e})
def createwindow():
root = tk.Tk()
root.title(Программа обработки данных)
root.geometry(300x150)
Создаем кнопку Поехали! и привязываем к ней функцию onclick.
btn = tk.Button(root, text=Поехали!, command=onclick, font=(Arial, 14))
btn.pack(expand=True)
root.mainloop()
if == :
createwindow()
Пошаговое объяснение решения:
-
Импортируем необходимые модули: os – для работы с файловой системой, shutil – для копирования файлов, sqlite3 – для работы с базой данных, re – для регулярных выражений, tkinter – для создания графического интерфейса, requests – для получения содержимого сайта.
-
Функция backupatabase() создаёт резервную копию файла iniciativa.bd в папке database (папка создаётся, если отсутствует). Если копирование завершилось успешно, выводим сообщение в консоль.
-
Функция clearable() подключается к базе данных iniciativa.bd, выполняет команду DELETE FROM beests для очистки таблицы и закрывает соединение.
-
Функция fetchcontent(url) отправляет GET-запрос на указанный URL, устанавливает кодировку в UTF-8 и возвращает весь текст HTML-страницы, если код ответа равен 200.
-
Функция extractcontent):
• Использует два маркера startmarker для поиска фрагмента в HTML-коде.
• С помощью регулярного выражения извлекается блок текста между указанными участками.
• В этом фрагменте производится поиск всех подстрок, удовлетворяющих шаблону ссылки в формате a href=....
• Функция является генератором и выдаёт по одной найденной ссылке (строке).
-
Функция onclick() – главный обработчик нажатия кнопки.
• Сначала создаётся резервная копия базы данных.
• Затем таблица beests очищается.
• Выполняется запрос на сайт для получения его содержимого.
• Из полученного HTML извлекаются ссылки между заданными участками кода.
• Затем по очереди, с помощью рекурсивного вызова функции processlink(), каждая ссылка из генератора сохраняется в переменной entry и передаётся для обработки (в данном примере – выводится в окошке messagebox, но здесь можно вставить и Ваши действия).
-
Функция createwindow() создаёт графическое окно с единственной кнопкой Поехали!.
-
В блоке if == : запускается функция создания основного окна.
Таким образом, при нажатии на кнопку происходит копирование базы данных, очистка таблицы, получение HTML-кода сайта, извлечение ссылок из заданного фрагмента и поочередная обработка каждой найденной ссылки (сохраняя ссылку в переменной entry). Вы можете заменить URL сайта и дописать необходимые действия с переменной entry вместо messagebox.
Это один из вариантов решения задачи на Python согласно указанным требованиям.