我试图制作一个https://replit.com/@Yoplayer1py/Gui-Pokedex,我想从}那里得到口袋妖怪的描述,pokename的意思是口袋妖怪的名字。例如:https://www.pokemon.com/us/pokedex/unown
有一个标签包含描述,而p标记的类是: version-xactive。
当我打印描述的时候,我什么也得不到,有时什么也没有。
下面是代码:
import requests
from bs4 import BeautifulSoup
# Assign URL
url = "https://www.pokemon.com/us/pokedex/"+text_id_name.get(1.0, "end-1c")
# Fetch raw HTML content
html_content = requests.get(url).text
# Now that the content is ready, iterate
# through the content using BeautifulSoup:
soup = BeautifulSoup(html_content, "html.parser")
# similarly to get all the occurences of a given tag
print(soup.find('p', attrs={'class': 'version-xactive'}).text)text_id_name.get(1.0, "end-1c")来自tkinter文本输入。
它表明:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
return self.func(*args)
File "main.py", line 57, in load_pokemon
print(soup.find('p', attrs={'class': 'version-xactive'}).text)
AttributeError: 'NoneType' object has no attribute 'text'提前谢谢!!
发布于 2021-04-28 04:46:08
看起来,描述的多个类是version-x active (至少对于乌诺)。这就是为什么soup.find('p', attrs={'class': 'version-xactive'}没有找到元素,从而返回None (因此您得到了错误)。
添加一个空格将解决您的问题:print(soup.find('p', attrs={'class': 'version-xactive'}).text)。注意:如果有多个具有相同类的p元素,那么find方法可能不会返回您想要的元素。
添加空检查还将防止错误发生:
description = soup.find('p', attrs={'class': 'version-x active'})
if description:
print(desription.text)发布于 2021-04-28 04:43:27
你应该把你的电话分开,这样你就可以做一个安全检查和一个类型检查。
替换
print(soup.find('p', attrs={'class': 'version-xactive'}).text)使用
tags = soup.find('p', attrs={'class': 'version-xactive'})
print("Tags:", tags)
if(type(tags) != NoneType):
print(tags.text)至少应该给你更多的信息。它可能仍然会在tags.text上崩溃。如果是的话,就把print("Tags:", tags)的打印输出放到上面,这样我们就可以看到数据是什么样子的。
https://stackoverflow.com/questions/67293685
复制相似问题