美文网首页
雅虎财经数据的抓取及图表制作

雅虎财经数据的抓取及图表制作

作者: kerwin0905 | 来源:发表于2017-08-13 21:42 被阅读0次

本次实践是抓取了雅虎财经的成分股数据,该数据是美股各大公司历年来的股票价格,具体包括开盘价,收盘价,最高最低价格。利用这些数据制作了一个图形界面,方便打印出各个时间段的图表。最终具体表现形式如下:

image.png

一、制作图形界面
首先创建一个StockFrame类,这个类关于图形界面,里面包含多个函数,所有在图形界面上的操作均在内部定义,内部基本分为 画图形界面、载入数据、选择操作、点击操作等.
本文中图形界面主要包含了 状态栏、textField、列表框、按钮等元素,UI界面是用wxpython制作的,也有其他图形界面的库,如果有这方面需求的可以深入了解下,具体代码上传到了github。

二、获取雅虎财经数据
由于雅虎财经采用动态加载,无法直接读取是获取不了数据的,需要使用自动化工具驱动浏览器来获取数据。数据获取的代码如下:

采用自动化工具驱动谷歌浏览器
driver = webdriver.Chrome() 
driver.get('https://finance.yahoo.com/quote/%5EDJA')
找到并自动点击Components项
element = driver.find_element_by_link_text('Components')
webdriver.ActionChains(driver).click(element).perform()
time.sleep(5)
转码
dStr = driver.page_source.encode('utf-8')
正则表达式获取成分股中所需要的参数
m = re.findall(r'<td class="Py.*?><.*?>(.*?)</a></td>.*?>(.*?)</td>.*?>(.*?)</td>.*?</tr>', dStr)
if m:  
  print m
  print len(m)
  top.setData(m)
else:
  wx.MessageBox('Download failed.', 'Message', wx.OK | wx.ICON_INFORMATION)
driver.close()

思路就是利用Selenium模块中的webdriver自动化工具来进入网页,
然后利用正则表达式获取所需要的参数,这里我们需要的是公司缩写、全称以及当前股价,如下图所示:

image.png

如果直接用网页获取源代码,是得不到以上几个数据的,转码后打印dStr,得到我们需要解析的数据是:
< td class ="Py(10px) Ta(start)" > < a href="/quote/ED?p=ED" class ="C($actionBlue) Cur(p) Td(u)" title="ED" > ED < / a > < / td > < td class ="Py(10px) Ta(start) Pstart(35px)" > Consolidated Edison, Inc.< / td > < td class ="Py(10px) W(16%)" > 78.53 < / td > < td class ="Py(10px)
W(16%)" > -0.05 < / td > < td class ="Py(10px) W(16%)" > < span class ="Trsdu(0.3s) C($dataRed)" > -0.06 % < / span > < / td > < td class ="Py(10px) W(16%)" > 1, 578, 790 < / td > < / tr > < tr class ="BdT Bdc($lightGray) Ta(end) Fz(s) W(12%)" >

三、将数据载入图形界面中

将数据放入设定好的位置
def setData(self, data):
        self.list.ClearAll()
        self.list.InsertColumn(0, "Symbol")
        self.list.InsertColumn(1, "Name")
        self.list.InsertColumn(2, "Last Trade")
        pos = 0
        for row in data:
            pos = self.list.InsertStringItem(pos + 1, row[0])
            self.list.SetStringItem(pos, 1, row[1].replace("&", "&"))
            self.list.SetColumnWidth(1, -1)
            self.list.SetStringItem(pos, 2, row[2])
            if (pos % 2 == 0):
                self.list.SetItemBackgroundColour(pos, (134, 225, 249))
        self.FitInside()
        pass

四、选择某家公司,便能生成如下界面:

参数图.png

五、根据选择参数制图
制图主要包括两个函数,一个是时间段选择的函数 :

def _wxdate2pydate(date):
    import datetime
    if date.IsValid():
        ymd = map(int, date.FormatISODate().split('-'))
        return datetime.date(*ymd)
    else:
        return None

另外就是图表制作的函数:

#code:公司代码;start, end:起止时间;list:所需要显示的指标
def PlotData(code, start, end, list):
    start_date = _wxdate2pydate(start)
    end_date = _wxdate2pydate(end)
    #根据公司代码,起止时间得到所有数据
    quotes = quotes_historical_yahoo_ochl(code, start_date, end_date)
    fields = ['date', 'open', 'close', 'high', 'low', 'volume']
    list1 = []
    #格式化时间,将时间参数放入list1列表
    for i in range(0, len(quotes)):
        x = date.fromordinal(int(quotes[i][0]))
        y = datetime.strftime(x, '%Y-%m-%d')
        list1.append(y)
    print list1
    #根据数据,时间列表,所有指标生成dataFrame
    quotesdf = pd.DataFrame(quotes, index=list1, columns=fields)
    #剔除date数据,这里是因为格式不一致
    quotesdf = quotesdf.drop(['date'], axis=1)
    quotesdftemp = pd.DataFrame()
    #将所选择的指标,如close,open的dateFrame赋予一个临时dateFrame中
    for i in range(0, len(list)):
        quotesdftemp[list[i]] = quotesdf[list[i]]
    print quotesdftemp
    print "ready to plot"
    #画图
    quotesdftemp.plot(marker='o')
    plt.show()

dateFrame的表现形式为 :

image.png

目的就是为了生成这个表格,并根据这个表格作图 :

image.png
代码地址:https://github.com/Kerwin1992/yahooFinance

相关文章

  • 雅虎财经数据的抓取及图表制作

    本次实践是抓取了雅虎财经的成分股数据,该数据是美股各大公司历年来的股票价格,具体包括开盘价,收盘价,最高最低价格。...

  • Pandas雅虎金融数据获取与分析

    雅虎财经 利用Pandas模块直接获取雅虎财经数据,方便之极。注意把官方提示把from pandas.io imp...

  • 抖音数据可视化分析实例

    先看一下抖音的可视化图表。 一、数据抓取 前段时间抓取的数据。 可以给分享一下抓取的思路: 目前又很多爬虫在抓取抖...

  • 21-19 图表---专业与创意

    一、图表秀 上下、恰当、全面 二、图表的制作过程 原始资料→提炼信息→选择图表→制作图表 1)分析数据 2)确定关...

  • E战到底第10期-Day26

    今天学习内容是动态图表的制作,主要有双坐标图表的制作及动态图表制作的2个案例2种方法。双坐标图表制作较简单且经常使...

  • shell脚本获取docker stats数据并添加时间

    使用脚本获取实现docker stats数据收集,并在每行前面增加上采集数据是时间,方便分析及制作图表

  • 动态图表的制作

    动态图表的制作 一、用VLOOKUP函数制作动态图表 数据—数据有效性—设置“序列”—选择来源“数据区域” 用VL...

  • 22.认识图表,选择合适的图表类型

    图表——秀的是专业、拼的是创意 1、图表秀 2、图表的制作过程 原始数据、原始文件 ---->理解数据、分析数据、...

  • 动态图表的制作

    相比常规图表,动态图表更有利于数据的展示,下面来学习动态图表的制作。 一、使用Vlookup函数来制作动态图表 1...

  • 2019-04-16

    不知不觉E战到底21天即将结束了。今天学习了 制作图表的过程: 原始数据-提取信息-选择图表-制作图表-图表展示 ...

网友评论

      本文标题:雅虎财经数据的抓取及图表制作

      本文链接:https://www.haomeiwen.com/subject/kczerxtx.html