1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java 抓取新浪财经网上的股票数据(1)

java 抓取新浪财经网上的股票数据(1)

时间:2022-09-07 09:42:49

相关推荐

java 抓取新浪财经网上的股票数据(1)

经过这两天对正则表达式以及网友一些分享资料的学习,今天终于写出了抓取股票数据挖掘的程序了,虽然大部分借鉴了一位网友的思路,但是也经过自己学习消化和封装整理,尤其是正则表达式方面(?=等特殊结构,网上资料很少,我会贴出几个特殊的正则表达式结构以供后来者学习)。

其实很简单,因为现在只是简单的抓取信息,仅是开始。不多说,分享一下封装好的代码(可直接复制,然后在main函数调用就行了)

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import .MalformedURLException;

import .URL;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* 抓取网络数据的类

* 数据位 : 日期、开、高、收、低、交易量(交易金额)

* @author Administrator

*

*/

public class StockDataMining {

private static String myStr="http://money./corp/go.php/vMS_MarketHistory/stockid/";

/*完整链接如:http://money./corp/go.php/vMS_MarketHistory/stockid/" +

"600006.phtml?year=&jidu=4";*/

/**

* 根据url从新浪财经上获取股票数据

* @param

* @param code 股票代码

* @param year 年份

* @param jidu 季度(1、2、3、4)

* @return null,如果异常发生。否则返回一个arraylist ,其中每个元素为一个hashmap———里面的值从1~7分别为 :日期、开、高、收、低、交易量、交易金额

* @throws MalformedURLException

*/

public List<HashMap<Integer, Object>> getStockData(String code,String year,String jidu){

try {

//拼接完整url

String tempStr=myStr+code+".phtml?year="+year+"&jidu="+jidu;

URL url=new URL(tempStr);

BufferedReader reader=null;

///创建输入流

reader=new BufferedReader(new InputStreamReader(url.openStream()));

///创建list存储器

List<HashMap<Integer,Object>> list=new ArrayList<HashMap<Integer,Object>>();

//创建hashmap存储每一行具体数据

HashMap<Integer, Object> hashMap=new HashMap<Integer, Object>();

//创建获取数据的pattern正则表达式

String regex="(?<=(date=)).*?(?=('>))|(?<=(\"center\">))\\d{1}.*?(?=(</div>))";

Pattern dataPattern=pile(regex);

///匹配读取内容,并存入list里面

int i=0;

String str;

while((str=reader.readLine())!= null){

//获得这一行匹配的数据

Matcher matcher=dataPattern.matcher(str);

//存入hashMap里面

while(matcher.find()){

i++;

hashMap.put(Integer.valueOf(i), matcher.group());

///左对齐输出

///System.out.printf("%-22s", matcher.group());

}

if(7==i){

//每七个数据算一行,此时把该行数据存入list并且重置i,与hashMap

list.add(hashMap);

i=0;

hashMap=new HashMap<Integer, Object>();

///换行

///System.out.println();

}

}//end of while

return list;

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

欢迎大家指正!

最近才来CSDN,所以代码直接贴上去的,望见谅!

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。