我是python的新手。我希望这段代码在tkinter中运行。在将tkinter添加到代码之前,它可以工作,但是现在我得到一个错误:'NoneType'对象没有属性'attrs'。我没有更改那部分代码。
我尝试了try-except
和if meta is not None:
,但是当我尝试运行if meta is not None:
return parse_data(meta.attrs['content'])
时,tkinter显示了一个空标签。
entry0 = tk.Entry(frame)
entry0.grid(row = 0, column = 1)
URL = "https://www.instagram.com/{}/"
def parse_data(s):
data ={}
s = s.split("-")[0]
s = s.split()
data['Followers'] = s[0]
data['Following'] = s[2]
data['posts'] = s[4]
return data
def scrape_data(username):
r = requests.get(URL.format(username))
s = BeautifulSoup(r.text,"html.parser")
meta = s.find("meta",property="og:description")
return parse_data(meta.attrs['content'])
if __name__ =="__main__":
username = entry0.get()
data = scrape_data(username)
def func():
label2 = tk.Label(frame, text = data)
label2.grid(row = 1, column = 1)
我希望代码正常运行,但是出现错误:“ NoneType”对象没有属性“ attrs”。
我希望tkinter在data
中显示label2
,但
答案 0 :(得分:0)
我看不到您的完整代码,但我认为您的问题是您不知道GUI框架如何工作。
首先:mainloop
将启动所有内容,并显示窗口。 mainloop()
之前的所有内容都会在您看到窗口之前执行。
第二:Entry
不会等待您的文本,您的entry.get()
可能会得到空字符串,甚至看不到tkinter的窗口。
在Button
中输入文本后,最好在窗口中有Entry
以启动功能。
Mainloop
显示窗口,它还会检查是否按下了按钮,并执行分配给按钮的功能。它做很多其他事情-从系统获取键/鼠标事件,将事件发送到小部件,更新小部件中的数据,将功能执行到按钮,重绘小部件和窗口等,直到关闭窗口。
import requests
from bs4 import BeautifulSoup
import tkinter as tk
URL = "https://www.instagram.com/{}/"
def parse_data(s):
data = {}
s = s.split("-")[0]
s = s.split()
data['Followers'] = s[0]
data['Following'] = s[2]
data['posts'] = s[4]
return data
def scrape_data(username):
r = requests.get(URL.format(username))
s = BeautifulSoup(r.text, "html.parser")
meta = s.find("meta", property="og:description")
return parse_data(meta.attrs['content'])
def on_click():
username = entry.get()
username = username.strip()
if username:
data = scrape_data(username)
label['text'] = data
else:
label['text'] = "Need username"
if __name__ =="__main__":
root = tk.Tk()
entry = tk.Entry(root)
entry.grid(row=0, column=1)
label = tk.Label(root)
label.grid(row=1, column=1)
button = tk.Button(root, text="Scrape", command=on_click)
button.grid(row=2, column=1)
root.mainloop()