Beautiful Soup4 'NoneType' 对象没有属性 'text' 错误

尝试从 Yahoo Finance 中抓取一些数字,但我一直为我的一个soup.find 函数获取一个AttributeError。代码:


from bs4 import BeautifulSoup as soup

import requests


#Switch

source = requests.get('https://finance.yahoo.com/quote/SWCH?p=SWCH&.tsrc=fin- srch').text

soup = soup(source, 'lxml')

price = soup.find('span', class_=lambda x:x and set(x.split()).issuperset(set("Trsdu(0.3s) Fw(b) Fz(36px) Fw(b) D(b) Mb(-4px)".split())))

downorup = soup.find('span', class_=lambda x:x and set(x.split()).issuperset(set("Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($dataRed)".split())))

print("Switch stock: " + price.text + ' ' + downorup.text)


慕桂英3389331
浏览 214回答 2
2回答

饮歌长啸

在第二个查询中,“Fz(24px)”必须是“Fz(14px)”,并且不能有“Pstart(10px)”部分:downorup = soup.find('span', class_=lambda x:x and set(x.split())\                .issuperset(set("Trsdu(0.3s) Fw(500) Fz(14px) C($dataRed)".split())))通常,您正在使用一种非常危险的方法来识别您的数据。如果页面的格式发生变化,您将无法再找到这些字段。"data-reactid"似乎是一个更可靠的标记。

当年话下

错误很可能是在print语句中抛出的。如果代码无法找到price/ downorup- 它将有一个值 None。在这种情况下,您正在尝试price.text, downorup.text从引发异常的 None 对象访问属性。添加对 None 的检查,例如:if price and downorup:     print("Switch stock: " + price.text + ' ' + downorup.text)这将去print陈述仅当price和downorup不无。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java