用Python获取“实时”雅虎财务数据

时间:2017-10-12 20:09:01

标签: python web-scraping yahoo-finance

我一直在使用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的任何建议吗?

1 个答案:

答案 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,直到找到突出显示我正在搜索的值的部分。上面的代码适用于您提供的网站。