привет! нужна программа на python, обрабатывающая строго сырые текстовые данные, иначе ничего не получится из-за спецсимволов. что она должна делать: 1. создавать окно с единственной кнопкой "Поехали!" 2. при нажатии на кнопку у нас по очереди: 2.1.
- Программирование
Условие:
привет! нужна программа на python, обрабатывающая строго сырые текстовые данные, иначе ничего не получится из-за спецсимволов.
что она должна делать:
1. создавать окно с единственной кнопкой "Поехали!"
2. при нажатии на кнопку у нас по очереди:
2.1. делается копия базы данных iniciativa.bd, лежащей в той же папке, что и основной проект, во вложенной папке database. пусть копия называется iniciativabackup.bd
2.2. содержимое таблицы beests базы данных iniciativa.bd очищается от данных
2.3. далее программа должна просматривать содержимое определённого сайта и находить по очереди в его коде все адреса ссылок между двумя участками кода:
начало: <div class='grid-4lg-3md-2xs-1 list'><div class='first-letter list-group col-24' id='а' data-letter='а' ><div class='list-group_wrapper'>а</div></div>
конец: <script>document.addEventListener("DOMContentLoaded", () => indexShowLetters([]));</script>
2.4. эти ссылки должны выдаваться в качестве переменной entry, после чего я буду запускать с этой переменной определённые действия, по их завершении поиск должен продолжаться далее, то есть результатом исполнения функции должна быть одна строка, а не массив
Решение:
Ниже приведён один из вариантов реализации требуемой программы. В комментариях подробно описан каждый шаг решения. Обратите внимание, что для веб-запросов используется библиотека 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() ------------------------------------------------------------ Пошаговое объяснение решения: 1. Импортируем необходимые модули: os – для работы с файловой системой, shutil – для копирования файлов, sqlite3 – для работы с базой данных, re – для регулярных выражений, tkinter – для создания графического интерфейса, requests – для получения содержимого сайта. 2. Функция backupatabase() создаёт резервную копию файла iniciativa.bd в папке database (папка создаётся, если отсутствует). Если копирование завершилось успешно, выводим сообщение в консоль. 3. Функция clearable() подключается к базе данных iniciativa.bd, выполняет команду DELETE FROM beests для очистки таблицы и закрывает соединение. 4. Функция fetchcontent(url) отправляет GET-запрос на указанный URL, устанавливает кодировку в UTF-8 и возвращает весь текст HTML-страницы, если код ответа равен 200. 5. Функция extractcontent): • Использует два маркера startmarker для поиска фрагмента в HTML-коде. • С помощью регулярного выражения извлекается блок текста между указанными участками. • В этом фрагменте производится поиск всех подстрок, удовлетворяющих шаблону ссылки в формате a href=.... • Функция является генератором и выдаёт по одной найденной ссылке (строке). 6. Функция onclick() – главный обработчик нажатия кнопки. • Сначала создаётся резервная копия базы данных. • Затем таблица beests очищается. • Выполняется запрос на сайт для получения его содержимого. • Из полученного HTML извлекаются ссылки между заданными участками кода. • Затем по очереди, с помощью рекурсивного вызова функции processlink(), каждая ссылка из генератора сохраняется в переменной entry и передаётся для обработки (в данном примере – выводится в окошке messagebox, но здесь можно вставить и Ваши действия). 7. Функция createwindow() создаёт графическое окно с единственной кнопкой Поехали!. 8. В блоке if == : запускается функция создания основного окна. Таким образом, при нажатии на кнопку происходит копирование базы данных, очистка таблицы, получение HTML-кода сайта, извлечение ссылок из заданного фрагмента и поочередная обработка каждой найденной ссылки (сохраняя ссылку в переменной entry). Вы можете заменить URL сайта и дописать необходимые действия с переменной entry вместо messagebox. Это один из вариантов решения задачи на Python согласно указанным требованиям.Похожие задачи
Не нашел нужную задачу?
Воспользуйся поиском
Выбери предмет
- Правоохранительные органы
- Пожарная безопасность
- Парикмахерское искусство
- Природообустройство и водопользование
- Почвоведение
- Приборостроение и оптотехника
- Промышленный маркетинг и менеджмент
- Производственный маркетинг и менеджмент
- Процессы и аппараты
- Программирование
- Право и юриспруденция
- Психология
- Политология
- Педагогика
- Трудовое право
- Теория государства и права (ТГП)
- Таможенное право
- Теория игр
- Текстильная промышленность
- Теория вероятностей
- Теоретическая механика
- Теория управления
- Технология продовольственных продуктов и товаров
- Технологические машины и оборудование
- Теплоэнергетика и теплотехника
- Туризм
- Товароведение
- Таможенное дело
- Торговое дело
- Теория машин и механизмов
- Транспортные средства