文档章节

Java-互联网金融-德指日K抓取

nickles
 nickles
发布于 2017/05/07 22:29
字数 635
阅读 30
收藏 0

简介:

前段时间项目的德指日K抓不到数据了,后面检查发现,这个接口已经被关闭了,所以取不到数据,因此自己在工具类中加了个小方法,抓了某家网站上的数据。具体网站就不列出来了,把代码贴上。股票,期货的指数其实是有专门的网站提供接口的,不过鉴于网上能提供这个数据的比较多,所以就用了免费的办法,简单省事的来把。

有些网站上能扒到的数据是这样的:

{
 "t":
     [1491955200,1492041600,1492473600,1492560000,1492646400,1492732800,1492992000,1493078400,1493164800,1493251200],
 "c":
     [12242.76,12147.7,12162.47,12040.23,12050.66,12091.33,12456.18,12482.9,12486.29,12478.28],
 "l":
     [12123.12,12089.94,11996.74,12001.86,11941.57,12009.12,12289.37,12439.11,12442.37,12426.99],
 "v":
     [76479500,75853200,89781500,85822600,85378000,109690000,191530000,94319000,66345700,104300000],
" s":"ok"
}

有些是这样的:

{
    "_comment": "pair_id: 40717, interval: 300, candles: 96",
    "candles": [
       ....
        [
            1493322600000,
            12466,
            12466,
            12462,
            12462,
            153
        ],
        [
            1493322900000,
            12460.5,
            12466.5,
            12460,
            12464.5,
            219
        ],
        [
            1493323200000,
            12460,
            12460,
            12460,
            12460,
            13
        ]
    ],
    "events": {
        "news": [],
        "ec": []
    },
    "attr": {
        "decimals": "1",
        "last_value": "12460.0",
        "last_close_value": "12460.00",
        "server_time": 1493349837,
        "interval": "300",
        "pair_id": "40717",
        "exchange_id": "85",
        "symbol": "德国DAX指数",
        "last_update_datetime": null
    },
    "edition_timezone_offset": 28800
    ....
}

各网站接口返回的数据结构各自不一致拿到数据后,要自己处理下滤出自己要的数据,基本的操作方法:

  1. 第一个就是看下是不是公开的接口,如果是的话就直接调用了,简单省事
  2. 在1条件下,做了防爬处理,会得到403 forbidden之类的错误,这个如何绕过,就见仁见智了
  3. 第三就是用HtmlUnit之类的模拟浏览器请求,拿到页面后再滤出自己要的数据,HtmlUnit有一个大坑就是对JS,CSS 的支持不怎么好,处理起来比较麻烦一点
    
    public static JSONArray getDaxData (String Url) throws IOException, ParseException {
        JSONArray arraydata = new JSONArray();
        JSONArray array = new JSONArray();
        try{
            //创建一个webclient
            WebClient webClient = new WebClient();
            //htmlunit 对css和javascript的支持不好,所以关闭
            webClient.getOptions().setJavaScriptEnabled(false);
            webClient.getOptions().setCssEnabled(false);
            //获取页面
            HtmlPage page = webClient.getPage(Url);
            final HtmlTable table = page.getHtmlElementById("curr_table");
            int rowsNum = 0;
            for (final HtmlTableRow row : table.getRows()) {
                if(rowsNum==0){
                    rowsNum++;                                    
                }else{
                    JSONObject object = new JSONObject();
                    int index = 0;
                    for (final HtmlTableCell cell : row.getCells()) {
                        if(index == 0 ){                           
                            SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");

                            String day=cell.asText().replaceAll("年","-")
                                    .replaceAll("月" ,"-")
                                    .replaceAll("日","").trim().toString();
                            java.sql.Date d1 = new java.sql.Date(sdf.parse(day).getTime());
                            object.put("date",d1.toString()); //日期
                            index++;
                        }else if (index == 1) {         //收盘价
                            object.put("close",Double.parseDouble(cell.asText().toString().replaceAll(",","").trim()));
                            index ++;
                        }else if (index == 2) {         //开盘价
                            object.put("open",Double.parseDouble(cell.asText().toString().replaceAll(",","").trim()));
                            index ++;
                        }else if (index == 3 ) {        //最高价
                            object.put("hight",Double.parseDouble(cell.asText().toString().replaceAll(",","").trim()));
                            index ++;
                        }else if (index == 4) {         //最低价
                            object.put("low",Double.parseDouble(cell.asText().toString().replaceAll(",","").trim()));
                            index ++;
                        }else if(index == 5){
                            String volume =  cell.asText().toString().replaceAll("K","").replaceAll("-","0").trim();
                            Double seleas = Double.parseDouble(volume)*1000;
                            object.put("volume",seleas.longValue());
                            index ++;
                        }else if(index == 6){
                            index ++;
                        }
                    }
                    array.add(object);
                    rowsNum++;
                }
            }
            for(int i = array.size()-1;i>0;i--){
                arraydata.add(array.get(i));
            }
            webClient.closeAllWindows();
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return arraydata;
    }

 

© 著作权归作者所有

nickles
粉丝 5
博文 39
码字总数 32378
作品 0
深圳
程序员
私信 提问
思科:Java 成 91% 恶意攻击的主要原因

思科的2014年度安全报告中指出:甲骨文公司的Java技术成为安全问题的主要来源。 根据思科最近的安全报告,在2013年,IT企业面对着各种各样的网络攻击和风险。但是,没有任何一项技术会遭到如...

oschina
2014/03/18
4.6K
21
Java就业变难了?你需要对自己有点信心

伴随着IT的火热,越来越多的人进入了IT领域,这在进一步推动着IT发展的同时也极大增加了就业压力。伴随着激烈的岗位竞争,越来越多的人开始感叹工作难找,越火的行业越是如此,Java自是首当其...

糖宝_d864
2018/06/08
0
0
【高薪诚聘】北京+技术牛人+系统架构????

系统架构师 金融相关经验背景 岗位职责: 1、负责宜信P2P信用贷款服务平台系统整体技术平台选型,软件与系统架构设计; 2、指导和培训高级软件开发工程师; 3、组织代码评审与设计评审工作;...

kev
2010/12/13
789
6
Java的痛

转自: OurJS 在2014年,如果一个程序员在命令行中运行一段简单的程序变得非常困难,那么这就是不正常的。 我写了些代码去连接 Keybase 和 OpenKeychain, 本计划写更多。因为这是一个Android...

Kris_zcl
2014/06/26
431
3
Vert.x中国用户组(上海地区)第一次技术沙龙

导读 是否还在羡慕node.js程序员秀事件驱动编程?Golang程序员秀coroutine? Java8内置了Lambda表达式,函数式编程,全新异步API等全新功能,但是否还是觉得无法在传统的Java项目有用武之地?...

力谱宿云
2016/07/04
384
1

没有更多内容

加载失败,请刷新页面

加载更多

MySql双主架构原理

在企业中,一般系统架构的瓶颈会出现在数据库这一部分,mysql主从架构在很大程度上解决了这部分瓶颈,但是在mysql主从同步的架构也存在很多问题;比如:1.关于数据写入部分(也就是主库)往往很难做...

xiaomin0322
13分钟前
0
0
分布式系统中一致性哈希

问题场景 近年来B2C、O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来。分布式系统相对于单系统,解决了流量大、系统高可用和高容错等问题。功能强大也意味着实现起来需要更多...

Java领航员
14分钟前
0
0
接口限流算法:漏桶算法和令牌桶算法

漏桶算法 漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。这一点和线程池原理是很相似的。 把请求比作是水,水来了都先放进桶里,并以限定...

铁骨铮铮
21分钟前
1
0
Android 生成二维码工具类

/** * 生成条形码和二维码的工具 */public class ZXingUtils { /** * 生成二维码 要转换的地址或字符串,可以是中文 * * @param url * @param width ...

lanyu96
27分钟前
1
0
谈谈lucene的DocValues特性之SortedNumericDocValuesField

前面已经介绍过NumericDocValuesField,这里想强调一下SortedNumericDocValuesField是针对同一篇文档中一键多值的情况进行排序的,换句话说不同文档的同一字段值可以乱序。核心的写入流程与谈...

FAT_mt
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部