本文章向大家介绍java爬取天天基金网数据,主要包括java爬取天天基金网数据使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
天天基金网网址:http://quote.eastmoney.com/center/gridlist.html#fund_lof
java爬虫实时获取基金收益历史记录代码:
首先要自己定义几个参数:基金编码,页数,每页显示条数 开始时间结束时间等
(我这直接写的静态方法使用的 大家可以改成test方法自行进行测试)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/**
* httclient 请求 get
* 获取基金网数据1
*/
public static jsonarray testdepartmentlist1(string code){
integer pageindex = 1 ;
integer pagesize= 20 ;
string starttime= "2018-1-1" ;
string endtime = "2020-4-15" ;
string referer = "http://fundf10.eastmoney.com/f10/jjjz_" + code + ".html" ;
long time = system.currenttimemillis();
string url = "http://api.fund.eastmoney.com/f10/lsjz?callback=jquery18306596328894644803_1571038362181&" +
"fundcode=%s&pageindex=%s&pagesize=%s&startdate=%s&enddate=%s&_=%s" ;
url = string.format(url,code,pageindex,pagesize,starttime,endtime,time);
system.out.println( "url= " + url);
system.out.println(url);
httprequest request = httputil.createget(url);
request.header( "referer" , referer);
string str = request.execute().body();
//获取str的长度
system.out.println( "str=" + str);
int length = str.length();
system.out.println( "length=" + length);
//indexof返回某个指定的字符串值在字符串中首次出现的位置
int indexstart = str.indexof( "(" );
system.out.println(indexstart);
//截取字符串
str = str.substring(indexstart + 9 , length - 90 );
system.out.println(str);
//转换为obj类型
jsonobject jsonobject = json.parseobject(str);
system.out.println(jsonobject);
//获取数组
jsonarray jsonarray = jsonobject.getjsonarray( "lsjzlist" );
//计算数组的长度
int size = jsonarray.size();
system.out.println(size);
return jsonarray;
}
|
通过基金编码查询基金名称
(由于基金网url里面的信息只有基金编号跟涨跌幅日期等 没有基金名称 我们通过基金网的查询功能自行填充基金编码进行查询)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/**
* httclient 请求 get
* 获取基金网数据2
*/
@test
public static string testdepartmentlist2(string code) {
//数据链接
string referer = "http://so.eastmoney.com/web/s?keyword=" +code+ "" ;
long time = system.currenttimemillis();
string url = "http://push2.eastmoney.com/api/qt/stock/get?ut=fa5fd1943c7b386f172d6893dbfba10b&fltt" +
"=2&fields=f59,f169,f170,f161,f163,f171,f126,f168,f164,f78,f162,f43,f46,f44,f45,f60,f47," +
"f48,f49,f84,f116,f55,f92,f71,f50,f167,f117,f85,f84,f58,f57,f86,f172,f108,f118,f107,f164," +
"f177&invt=2&secid=0." +code+ "&cb=jquery1124006112441213993569_1587006450385&_=1587006450403" ;
url = string.format(url,code);
system.out.println( "请求url:" + url);
//http请求
httprequest request = httputil.createget(url);
request.header( "referer" , referer);
string str = request.execute().body();
//获取str的长度
system.out.println( "str=" + str);
int length = str.length();
system.out.println( "length=" + length);
//indexof返回某个指定的字符串值在字符串中首次出现的位置
int i = str.indexof( "(" );
system.out.println(i);
//截取字符串
str = str.substring(i + 55 , length - 3 );
system.out.println(str);
//转换为obj类型
jsonobject jsonobject = json.parseobject(str);
system.out.println(jsonobject);
string fundname = jsonobject.getstring( "f58" );
return fundname;
}
|
java实时获取基金收益
业务层实现:(主要功能:用户输入基金编号查询某个基金时如果数据库没有,自动从天天基金网爬取数据存储到数据库并显示到页面上)
显示的数据分别有:基金编号 基金日期 基金名称 实际价格 每日涨跌幅
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
@override
public list<fundhistory> query(string fundcode) {
list<fundhistory> query = fundhistorydao.query(fundcode);
if (query.size()== 0 ) {
jsonarray jsonarray = testdepartmentlist1(fundcode);
system.out.println(jsonarray);
//计算数组的长度
int size = jsonarray.size();
system.out.println(size);
//for循环遍历
for ( int j = 0 ; j < size; j++) {
jsonobject jsonobject1 = jsonarray.getjsonobject(j);
//获取净值日期
string date = jsonobject1.getstring( "fsrq" );
//获取单位净值
double unit = jsonobject1.getdouble( "dwjz" );
//获取累积净值
double accumulates = jsonobject1.getdouble( "ljjz" );
//获取日增长率
string growthrate = jsonobject1.getstring( "jzzzl" );
//创建时间
datetime datetime = new datetime();
//获取创建时间
string datetime = string.valueof(datetime);
fundhistory fundhistory = new fundhistory();
fundhistory.setfundcode(fundcode);
fundhistory.setdate(date);
fundhistory.setunit(unit);
fundhistory.setaccumulates(accumulates);
fundhistory.setgrowthrate(growthrate);
fundhistory.setcreatetime(datetime);
fundhistorydao.savefundhistory(fundhistory);
}
fundhistory fundhistory = new fundhistory();
fundhistory.setfundcode(fundcode);
//获取基金名称
string fundname = testdepartmentlist2(fundcode);
fundhistory.setfundname(fundname);
fundhistorydao.updatefundhistory(fundhistory);
list<fundhistory> query2 = fundhistorydao.query(fundcode);
fundhistory fundhistory1 = query2.get( 0 );
funddao.savefund2(fundhistory1);
return query2;
}
return query;
}
|
controller层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/**
* 基金页面数据交互
* @param
* @return
*/
@requestmapping ( "/enquiryfund" )
@responsebody
public result enquiryfund(string fundcode,string fundname){
result result = new result<>();
if (fundcode!= "" ){
list<fundhistory> query = fundhistoryservice.query(fundcode);
if (query== null ){
list<fundhistory> query2 = fundhistoryservice.query(fundcode);
result.setdata(query2);
return result;
}
result.setdata(query);
return result;
} else if (fundname!= "" ){
list<fundhistory> fundhistories = fundhistoryservice.query2(fundname);
result.setdata(fundhistories);
return result;
}
return result;
}
|
java实时获取基金收益项目运行效果如图:
(根据基金编号进行查询基金 如果数据库没有则自动从天天基金网拉取数据并显示到页面上 共拉取20条历史数据)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
/**
* httclient 请求 get
* 获取基金网数据1
*/
public static jsonarray testdepartmentlist1(string code){
integer pageindex = 1 ;
integer pagesize= 20 ;
string starttime= "2018-1-1" ;
string endtime = "2020-4-15" ;
string referer = "http://fundf10.eastmoney.com/f10/jjjz_" + code + ".html" ;
long time = system.currenttimemillis();
string url = "http://api.fund.eastmoney.com/f10/lsjz?callback=jquery18306596328894644803_1571038362181&" +
"fundcode=%s&pageindex=%s&pagesize=%s&startdate=%s&enddate=%s&_=%s" ;
url = string.format(url,code,pageindex,pagesize,starttime,endtime,time);
system.out.println( "url= " + url);
system.out.println(url);
httprequest request = httputil.createget(url);
request.header( "referer" , referer);
string str = request.execute().body();
//获取str的长度
system.out.println( "str=" + str);
int length = str.length();
system.out.println( "length=" + length);
//indexof返回某个指定的字符串值在字符串中首次出现的位置
int indexstart = str.indexof( "(" );
system.out.println(indexstart);
//截取字符串
str = str.substring(indexstart + 9 , length - 90 );
system.out.println(str);
//转换为obj类型
jsonobject jsonobject = json.parseobject(str);
system.out.println(jsonobject);
//获取数组
jsonarray jsonarray = jsonobject.getjsonarray( "lsjzlist" );
//计算数组的长度
int size = jsonarray.size();
system.out.println(size);
return jsonarray;
}
|
这就是我为大家分享的java实时获取基金收益项目源码,希望对大家有帮助哈~~~
到此这篇关于java实时获取基金收益项目源码分享的文章就介绍到这了,更多相关java获取基金收益内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_38082146/article/details/114691797