1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
from tkinter import * import requests def get_idea(): login=loginField.get url ="https://www.culture.ru/literature/poems/tag-filosofskie?ysclid=m60thk97nl659956236" params={"q":login} result = requests.get(url, params=params) print(str(result.text)) proba = Tk() proba["bg"]="white" proba.title("СтихИя") proba.geometry("500x500") proba.resizable(width=False, height=False) canvas=Canvas(proba, height=500, width=500) canvas.pack() frame=Frame(proba, bg="white") frame.place( relwidth=1, relheight=1) title=Label(frame, text="Сборник философских стихотворений", bg="red",font=20) title.pack() loginField = Entry(frame, bg='white', font=30) loginField.pack() btn=Button(frame, text="Найти себя", bg="red", command=get_idea) btn.pack() proba.mainloop() |
Создал приложение для поиска философских стихов на сайте Культрура.рф , но вместо названия выходят слова в перемешку с кодом, как исправить?
@ferbancenkoanton У тебя есть несколько проблем в коде:
Ошибка при получении данных из поля ввода
login=loginField.get
, но .get
— это метод, его нужно вызывать:
1
|
login = loginField.get() |
Некорректный запрос к сайту
Ты передаёшь params={"q": login}
, но сайт Культура.рф не использует такой параметр поиска (по крайней мере, не очевидно). Скорее всего, ты просто получаешь HTML-код страницы, а не JSON с данными.
Парсинг результата
Страница возвращает HTML, а не JSON, поэтому тебе нужно парсить его. Для этого можно использовать BeautifulSoup
из библиотеки bs4
. Установи её командой:
1
|
pip install beautifulsoup4 |
И исправь код следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
from tkinter import * import requests from bs4 import BeautifulSoup def get_idea(): login = loginField.get() # Правильное получение текста url = "https://www.culture.ru/literature/poems/tag-filosofskie" try: result = requests.get(url) result.raise_for_status() # Проверка на ошибки soup = BeautifulSoup(result.text, "html.parser") # Найдём заголовки стихотворений (Примерно, может отличаться) titles = soup.find_all("h2", class_="some-title-class") # Заменить на реальный класс заголовков poems = [t.text.strip() for t in titles] if poems: output_text.set("\n".join(poems[:5])) # Показываем 5 заголовков else: output_text.set("Стихи не найдены.") except requests.exceptions.RequestException as e: output_text.set(f"Ошибка: {e}") proba = Tk() proba["bg"] = "white" proba.title("СтихИя") proba.geometry("500x500") proba.resizable(width=False, height=False) canvas = Canvas(proba, height=500, width=500) canvas.pack() frame = Frame(proba, bg="white") frame.place(relwidth=1, relheight=1) title = Label(frame, text="Сборник философских стихотворений", bg="red", font=20) title.pack() loginField = Entry(frame, bg='white', font=30) loginField.pack() btn = Button(frame, text="Найти стихи", bg="red", command=get_idea) btn.pack() output_text = StringVar() output_label = Label(frame, textvariable=output_text, bg="white", wraplength=400, justify=LEFT) output_label.pack() proba.mainloop() |
Entry
.BeautifulSoup
для парсинга HTML.Label
вместо print
, чтобы текст отображался в окне.Попробуй, если что — поправим парсер под структуру сайта! 😊