1. Главная
  2. Библиотека
  3. Программирование
  4. привет! нужна программа на python, обрабатывающая строг...
Решение задачи на тему

привет! нужна программа на python, обрабатывающая строго сырые текстовые данные, иначе ничего не получится из-за спецсимволов. что она должна делать: 1. создавать окно с единственной кнопкой "Поехали!" 2. при нажатии на кнопку у нас по очереди: 2.1.

  • Программирование
  • #Языки программирования (C++, Java, Python и др.)
  • #Веб-программирование
  • #Базы данных и SQL
привет! нужна программа на 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 согласно указанным требованиям.

Не нашел нужную задачу?

Воспользуйся поиском

Выбери предмет