我一直在使用urllib2和直接文本函数来查找用于货币价格的bloomberg,以读取存储价格的hmtl部分。可能不会赢得任何效率奖,但它适合我的目的。这是从页面被抓取的代码中提取的。
#grab the html source as a big string
response = urllib2.urlopen('https://www.bloomberg.com/quote/CHFGBP:CUR')
page = response.read()
#locate the html where price is stored
pricestart = page.find('meta itemprop="price" content=')+len('meta itemprop="price" content=')
#plus twenty characters
price = page[pricestart:pricestart+20]
#find the data between double quotes in that substring
pricesplit = price.split('"')
#the 1st element of the output array is the price, cast it as a float
priceAsFloat = float(pricesplit[1])
#and save it to the current prices dictionary
pricesCurr[keys] = priceAsFloat
我想为雅虎财经做同样的事情,因为它在更新中更频繁,给人一种“实时”价格的感觉(我知道它们会延迟15分钟)。
但是,我在bloomberg html上运行的方法不适用于yahoo源
查看此网址,例如https://uk.finance.yahoo.com/quote/CHFJPY=X?p=GBPJPY=X
检查urllib2.urlopen返回的html - 当前价格不在文本中。或者至少我找不到它!
任何人都可以提供有关如何抓取雅虎财务HTML的任何建议吗?
答案 0 :(得分:0)
我也一直在使用雅虎财务数据。你正在寻找的价值就在那里,但却被埋没了。以下是我用来刮取雅虎财务的代码摘录:
from bs4 import BeautifulSoup
import urllib3 as url
import certifi as cert
def get_stock_price(name):
http = url.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=cert.where())
html_doc = http.request('GET', 'https://finance.yahoo.com/quote/' + name + '?p=' + name)
soup = BeautifulSoup(html_doc.data, 'html.parser')
return soup.find("span", class_="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").get_text()
其中name
是股票的简写名称(例如'tsla')。为了找到合适的刮擦值,我手动向下钻取html,直到找到突出显示我正在搜索的值的部分。上面的代码适用于您提供的网站。