繁体   English   中英

美丽的Soup4'NoneType'对象没有属性'text'错误

[英]Beautiful Soup4 'NoneType' object has no attribute 'text' Error

尝试从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)

在第二个查询中,“ 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 / price downorup -则其值为无。 在这种情况下,您尝试从引发异常的None对象访问price.text, downorup.text属性。

添加无检查,例如:

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

仅当pricedownorup都不为None时, downorup进入print语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM