BeautifulSoup4查找方法

时间:2018-11-11 02:48:44

标签: python python-3.x beautifulsoup

我尝试使用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)

谢谢,        维吉河

2 个答案:

答案 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)"...