我尝试使用python3从Yahoo财务中抓取一些号码,但我得到的只是一个“无”。
from bs4 import BeautifulSoup
import requests
source = requests.get('https://finance.yahoo.com/quote/SWCH?
p=SWCH&.tsrc=fin-srch').text
soup = BeautifulSoup(source, 'lxml')
price = soup.find('span', class_='Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)')
print(price)
谢谢, 维吉河
答案 0 :(得分:1)
请注意,如果将列表传递给class_
,则kwarg bs4将选择文档中具有任何指定className的元素,而不是全部元素。
还需要注意的是,某些类值是使用浏览器JavaScript动态设置的,因此它们不会出现在实际文档中。
我将您的查找声明修改为以下内容:
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())))
以下代码返回SWCH
的当前价格
from bs4 import BeautifulSoup
import requests
source = requests.get('https://finance.yahoo.com/quote/SWCH?p=SWCH&.tsrc=fin-srch').text
soup = BeautifulSoup(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())))
print(price.text) # 9.29 for now
答案 1 :(得分:0)
'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'
不是一个类,而是五个类。如果要查找其中任何一个,则应将它们作为列表传递:
soup.find('span', class_='Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'.split())
#<span class="D(ib) W($privatePromoMsgWidth) Fz(12px) Fw(500) Va(m) Wob(n)"...