要想对股票进行分析,那么我们首先需要获取股票的历史数据,最省钱的办法就是去网络上爬取。
以下是我的做法,可供参考:
免费获取更多最新股市数据关注头像同名恭祝好!
第一部分是code,即股票代码,如果是沪市,则在代码前加个6,深市加个0,创业板加个3;
第三部分是end,即结束日期,一般默认为最新一天;
第四部分是fields,即想要获取的股票的数据类型,详情见代码。
知道了这些以后,我们就可以针对不同的个股组装不同的URL来抓取数据了。
那么我们需要的数据主要有两个,
另一个则是个股的上市日期,
这两个数据可以直接从一些炒股客户端上下载下来 ,如果你嫌烦的话,也可以从我这获取。
我是用Java写的,代码如下:
public void doinitBaseInfoData() {
//Todo
/*
* 1. get all codeList
* 2. for every code, get txt
*
* */
List<String> codeList = onMarketBaseServiceMapper.getAllCodeList();
for (String code : codeList) {
String fileName = Constants.DIR_NETEASE + code + ".txt";
File tempFile = new File(fileName);
if (tempFile.exists()) {
System.out.println(fileName + " exists!");
continue;
}
StringBuffer urlBuffer = new StringBuffer("http://quotes.money.163.com/service/chddata.html?code=");
if (code.startsWith("0")) {
urlBuffer.append("1");
} else if (code.startsWith("3")) {
urlBuffer.append("1");
} else if (code.startsWith("6")) {
urlBuffer.append("0");
} else {
System.out.println("code not start in 0 or 3 or 6!");
continue;
}
urlBuffer.append(code).append("&start=");
Date marketDate = onMarketBaseServiceMapper.queryMarketDateByCode(code);
urlBuffer
.append(marketDate.toString())
.append("&end=20191227&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER");
System.out.println(urlBuffer.toString());
FileUtils.writeData2File(
WebUtils
.getURLInfo("GB2312", urlBuffer.toString()),
fileName);
System.out.println(fileName + " got from web!");
Utils.sleep(5 * 1000);
}
}
private static String ERROR_URL = "error_URL!";
public static String getURLInfo(String charset, String urlInfo){
//读取目的网页URL地址,获取网页源码
StringBuffer webDataBuf = new StringBuffer("");
try {
URL url = new URL(urlInfo);
HttpURLConnection httpUrl;
httpUrl = (HttpURLConnection)url.openConnection();
httpUrl.setConnectTimeout(8 * 1000);
httpUrl.setReadTimeout(25 * 1000);
int code = httpUrl.getResponseCode();
if (code != 200) {
System.out.println();
return ERROR_URL;
}
InputStream is = httpUrl.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,charset));
String line;
while ((line = br.readLine()) != null) {
webDataBuf
.append(line)
.append("\n");
}
is.close();
br.close();
} catch (SocketTimeoutException ste) {
System.out.println("SocketTimeoutException Read timed out!");
return ERROR_URL;
} catch (IOException e) {
// Todo Auto-generated catch block
e.printstacktrace();
return ERROR_URL;
}
return webDataBuf.toString();
}
欢迎交流讨论。
原文地址:https://www.jb51.cc/wenti/3282495.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。