Нужна срочная помощь!

Пользователь

от ferbancenkoanton , в категории: Python , месяц назад
 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()


Создал приложение для поиска философских стихов на сайте Культрура.рф , но вместо названия выходят слова в перемешку с кодом, как исправить?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от Ekaterina_90 , 16 дней назад

@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()

Что исправлено:

  1. Правильное получение данных из Entry.
  2. Добавлен BeautifulSoup для парсинга HTML.
  3. Вывод заголовков стихотворений (но нужно найти правильный CSS-класс заголовков, его можно посмотреть в коде страницы через DevTools).
  4. Обработка ошибок при запросе к сайту.
  5. Вывод результата в Label вместо print, чтобы текст отображался в окне.

Попробуй, если что — поправим парсер под структуру сайта! 😊