微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

网络爬虫获取股票历史行情

要想对股票进行分析,那么我们首先需要获取股票的历史数据,最省钱的办法就是去网络上爬取。

以下是我的做法,可供参考:

免费获取更多最新股市数据关注头像同名恭祝好!

第一部分是code,即股票代码,如果是沪市,则在代码前加个6,深市加个0,创业板加个3;

第二部分是start,即开始日期,一般认为上市日期

第三部分是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 举报,一经查实,本站将立刻删除。

相关推荐