Java获取web数据(Java获取股票数据)

使用Java8新特性获取股票数据

1.数据来源http://data.eastmoney.com/zjlx/detail.html

Java获取web数据(Java获取股票数据)_第1张图片

2.获取数据,就是解析这个data,代码如下

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.stream.Stream;

public class StokeData {

	private static String time ="2018-09-2809:00:00";
	private static int num = 1;
	private static boolean flag = false;

	private static BufferedWriter bw = null; 
	    public static void main(String[] args) throws InterruptedException, IOException {
	    	
	    	String url = "http://data.eastmoney.com/zjlx/detail.html";
	    	get(url);
    		for(num = 1;num <= 74 && flag; num++) {
    			get(url);
    		}
    		if(bw != null) {
    			bw.close();
    		}
	    	flag = false;
	    }



		private static void stream(Stream lines) throws IOException, ParseException {
			String line = lines.filter(l ->  l.contains("dataurl:") )
			.map(l -> l.substring(l.lastIndexOf("token"), l.lastIndexOf("{")))
			//ChangePercent 涨跌排序
			//BalFlowMain 今日主力净流入-> 净额 排序
			
//			   
  • 全部股票
  • //
  • 沪深A股
  • //
  • 沪市A股
  • //
  • 深市A股
  • //
  • 创业板
  • //
  • 中小板
  • //
  • 沪市B股
  • //
  • 深市B股
  • //
  • 今日排行
  • //
  • 3日排行
  • //
  • 5日排行
  • //
  • 10日排行
  • .map(l -> "http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=ct&st=(ChangePercent)&sr=-1&p=1&ps=50&js=var%20CHKjvtxf={pages:(pc),date:%222014-10-22%22,data:[(x)]}&"+l+"&cmd=C._AB&sty=DCFFITA") .map(l -> getData(l)) .map(l -> l.substring(l.indexOf("[")+1,l.lastIndexOf("]"))) .map(l -> l.replaceAll(" ", "").replaceAll("\t", "")) .flatMap(l -> Stream.of(l.split("\",\""))) . findFirst() .get().split(",")[15]; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Date date = sdf.parse(line); sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); time = sdf.format(date); File f = new File("F:\\stoke_data\\"+time+".txt"); flag = false; if(!f.exists()) { bw = new BufferedWriter(new FileWriter(f)); flag = true; } } private static void write(Stream lines) throws IOException { lines.filter(l -> l.contains("dataurl:") ) .map(l -> l.substring(l.lastIndexOf("token"), l.lastIndexOf("{"))) .map(l -> "http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=ct&st=(ChangePercent)&sr=-1&p="+num+"&ps=50&js=var%20CHKjvtxf={pages:(pc),date:%222014-10-22%22,data:[(x)]}&"+l+"&cmd=C._AB&sty=DCFFITA") .map(l -> getData(l)) .map(l -> l.substring(l.indexOf("[")+1,l.lastIndexOf("]"))) .map(l -> l.replaceAll(" ", "").replaceAll("\t", "")) .flatMap(l -> Stream.of(l.split("\",\""))) .map(l -> l.replaceAll(" ", "").replaceAll("\"", "")) .forEach(l ->{ try { bw.write(l); bw.newLine(); } catch (IOException e) { System.out.println(l); } } ); bw.flush(); } /** * 接口调用 GET */ public static void get(String urls) { try { URL url = new URL(urls); // 把字符串转换为URL请求地址 HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打开连接 if (System.currentTimeMillis()%2==0) { connection.setRequestProperty("Content-Type", "application/x-javascript"); connection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36"); } connection.connect();// 连接会话 // 获取输入流 BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); Stream lines = br.lines(); if(!flag) { stream(lines); }else { write(lines); } br.close();// 关闭流 connection.disconnect();// 断开连接 // System.out.println(sb.toString()); } catch (Exception e) { System.out.println("请求失败!"); e.printStackTrace(); } } /** * 接口调用 GET */ public static String getData(String urls) { try { URL url = new URL(urls); // 把字符串转换为URL请求地址 HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打开连接 if (System.currentTimeMillis()%2==0) { connection.setRequestProperty("Content-Type", "application/x-javascript"); connection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36"); } connection.connect();// 连接会话 // 获取输入流 BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = br.readLine(); br.close();// 关闭流 connection.disconnect();// 断开连接 // System.out.println(sb.toString()); return line; } catch (Exception e) { System.out.println("请求失败!"); } return null; } }

    3.代码分析

    访问web页面

    找到对应的token

    拼接处数据的URL地址

    查看数据的日期

    如果是新的数据,就写到磁盘

    4.如果对Java的语言不熟悉

    Java8新特性: https://blog.csdn.net/u014646662/article/details/52261511

    你可能感兴趣的:(java,java8,Java8)