正在处理一个加密货币小部件,该小部件实时抓取特定加密货币价格的html,但运行了AttributeError:'NoneType'对象没有属性'find'。
这个问题突然发生了,我真的很困惑为什么它没有早点出现。在此之前,我已经运行了很多次代码,完全没有问题。所以我的两个问题是。。。
为什么会突然发生这种事?
和
我该如何解决这个问题?
from tkinter import *
import requests
from bs4 import BeautifulSoup
from tkinter.ttk import *
from time import strftime
def get_crypto_price(coin):
url = "https://www.google.com/search?q=" + coin + "+price" # Defining link to coin
HTML = requests.get(url) # Requesting link access
soup = BeautifulSoup(HTML.text, 'html.parser') # Parser
text = soup.find("div", attrs={'class': 'BNeawe iBp4i AP7Wnd'}).find("div",
attrs={
'class': 'BNeawe iBp4i AP7Wnd'}).text # HTML Scrubber
return coin + ': ' + text + ' | '
root = Tk()
root.title('Crypto Widget 2021')
root.geometry('1080x40')
lab = Label(root)
lab.pack()
def update():
lab['text'] = get_crypto_price("Bitcoin") + get_crypto_price("Ethereum") + get_crypto_price(
"Litecoin") + get_crypto_price("Dogecoin")
lab.after(5000, update)
update()
def time():
string = strftime('%H:%M %p')
lbl.config(text=string)
lbl.after(5000, time)
lbl = Label(root, font=('times new roman', 10, 'bold'),
background='white',
foreground='black')
lbl.pack(anchor='n')
time()
root.mainloop()
给定您在find
函数(BNeawe iBp4i AP7Wnd
(中使用的类,我假设它们使用的是已编译范围的类。因此,如果他们发布了新版本的网站,那么元素的CSS类可能已经更改。
你最近有没有在那个网站上(使用控制台(检查DOM,看看这些元素是否仍然存在?
看起来您的错误来自第12行,其中您意外地将一些代码加倍。。。
我运行了它,但没有得到你看到的错误。但是,总的来说,你是在把一个发现放在另一个发现之上,你可以避免错误,但可以把它分成几个阶段,而不是仅仅假设第一个发现总是成功的。
所以,粗略地说,而不是说:
text = soup.find(blah blah blah).find(blah blah blah).text
将其分解为多个阶段:
text1 = soup.find(blah blah blah)
if text1:
text2 = text1.find(blah blah blah...)
等等
或者,你可以把除了块之外的所有东西都放在一个尝试中,但我更喜欢把事情分解,看看第一个失败发生在哪里。。。