Java-互联网金融-德指日K抓取
2017-05-07 00:00
78 查看
摘要: 使用htmlunit实现德指日K抓取
简介:
前段时间项目的德指日K抓不到数据了,后面检查发现,这个接口已经被关闭了,所以取不到数据,因此自己在工具类中加了个小方法,抓了某家网站上的数据。具体网站就不列出来了,把代码贴上。股票,期货的指数其实是有专门的网站提供接口的,不过鉴于网上能提供这个数据的比较多,所以就用了免费的办法,简单省事的来把。
有些网站上能扒到的数据是这样的:
有些是这样的:
各网站接口返回的数据结构各自不一致拿到数据后,要自己处理下滤出自己要的数据,基本的操作方法:
第一个就是看下是不是公开的接口,如果是的话就直接调用了,简单省事
在1条件下,做了防爬处理,会得到403 forbidden之类的错误,这个如何绕过,就见仁见智了
第三就是用HtmlUnit之类的模拟浏览器请求,拿到页面后再滤出自己要的数据,HtmlUnit有一个大坑就是对JS,CSS 的支持不怎么好,处理起来比较麻烦一点
简介:
前段时间项目的德指日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条件下,做了防爬处理,会得到403 forbidden之类的错误,这个如何绕过,就见仁见智了
第三就是用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; }
相关文章推荐
- Java-互联网金融-德指日K抓取2[改进篇]
- 用Java从网上抓取指定URL源码的方案-Java基础-Java-编程开发
- 通过java.net.URL类抓取某个网页的内容 选择自 cqq 的 Blog
- 用java抓取cnproxy代理服务器地址
- java 高级应用----HttpURLConnection + Pattern----抓取网站分页文本数据+简单整理
- 【JAVA】一个抓取Web图片的小例子
- Java抓取文件保存到本地
- (转)JAVA综合面试题:页面的抓取、解析、保存数据库和生成HT
- Java 根据关键字抓取google 新闻 网络数据 .*
- 最近发现 java抓取不到baidu首页源代码
- JAVA常用整理(1)--通过java.net.URL类抓取某个网页的内容
- JAVA 抓取网页内容
- Java抓取文件保存到本地
- JAVA综合面试题:页面的抓取、解析、保存数据库和生成HTML的
- 用java从网络上抓取HTML文件内容并写入本地文本中
- JAVA抓取网络数据包代码
- 抓取网页中指定节点的内容(java版本)
- java中使用jdom生成百度新闻抓取的xml文件
- java页面抓取代码
- java新闻抓取程序代码