Проблемы с отображением значений веб-парсинга в Tkinter - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь отобразить изображение внутри окна Tkinter с помощью веб-скрапинга, отображая сообщение из определенного места на веб-сайте, которое говорит на португальском языке «Capella Ganhou» или «Procyon Ganhou». Я пытался найти решение на разных форумах, но не смог найти ни одного, исправляющего ошибку в моей ситуации. Я также протестировал печать, чтобы убедиться, что строка существует и возвращает свое значение, а также инкапсулировал ее в переменную. Исходный код и ошибка приведены ниже.

from tkinter import *
import urllib.request
from bs4 import BeautifulSoup
from IPython.display import Image, display
from PIL import Image, ImageTk
import io

def capella_tg():
    resultado_tg = StringVar()
    resultado_tg.set(soup.find_all("font")[5].string)
    label_resultado_tg = Label(root, textvariable=resultado_tg).pack()

def procyon_tg():
    resultado_tg = StringVar()
    resultado_tg.set(soup.find_all("font")[4].string[3:])
    label_resultado_tg = Label(root, textvariable=resultado_tg).pack()

def img_capella():
    raw_data = urllib.request.urlopen("https://i.imgur.com/AHLqtt0.jpg").read()
    im = Image.open(io.BytesIO(raw_data))
    image = ImageTk.PhotoImage(im)
    label1 = Label(root, image=image).pack()

def img_procyon():
    raw_data = urllib.request.urlopen("https://i.imgur.com/TQyCnfD.jpg").read()
    im = Image.open(io.BytesIO(raw_data))
    image = ImageTk.PhotoImage(im)
    label1 = Label(root, image=image).pack()

root = Tk()

with urllib.request.urlopen("http://www.cabaleasy.com") as url: page = url.read()

soup = BeautifulSoup(page, "html.parser")
#print(soup.find_all("font")[5].string)

try:
    capella_tg()
except:
    procyon_tg()

if capella_tg():
    img_capella()
elif procyon_tg():
    img_procyon()

root.mainloop()

------- ОШИБКА ---------

Traceback (most recent call last):
  File "C:/Users/LucasDEV/PycharmProjects/LucasDEV/WEB_SCRAPPING/TESTES.py", line 49, in <module>
    elif procyon_tg():
  File "C:/Users/LucasDEV/PycharmProjects/LucasDEV/WEB_SCRAPPING/TESTES.py", line 17, in procyon_tg
    resultado_tg.set(soup.find_all("font")[4].string[3:])
TypeError: 'NoneType' object is not subscriptable

1 Ответ

0 голосов
/ 06 мая 2020

@ Dipen Shah Вот почему я использовал структуру try / except для. Но это не работает, и я получаю ту же ошибку. Я также пробовал этот способ:

def capella_tg():
    resultado_tg = StringVar()
    try:
        resultado_tg.set(soup.find_all("font")[5].string)
        label_resultado_tg = Label(root, textvariable=resultado_tg).pack()
    except:
        pass

Я тестировал просто с использованием текста, и он работает:

import urllib.request
from bs4 import BeautifulSoup

with urllib.request.urlopen("http://www.cabaleasy.com") as url: page = url.read()

soup = BeautifulSoup(page, "html.parser")

try:
    print(soup.find_all("font")[5].string) 
    #At this moment, it will not be showing, cuz the status changes every hour
except:
    print(soup.find_all("font")[4].string[3:])
...