想看看各家上市公司的研发费用,所以去东方财富里面抓取数据。
1抓取准备工作
1首先找到研发费用的数据的key名字
2找去找到是如何访问得到这些数据
查看源代码
得到研发费用的名字是RDEXP,再去看是访问了什么url获取了资源的
从名字看就知道是通过ajax获取数据的,所以我们进去看ajax返回数据有没有复合要求的,找到了
http://f10.eastmoney.com/NewFinanceAnalysis/lrbAjax?companyType=4&reportDateType=0&reportType=1&endDate=&code=SH603893
从参数看code就是上市公司的代码,其他的参数,没关注。
返回的数据是一个json字符串,大家自己发掘。
从哪里获取上市公司的code呢?
同花顺有数据导出excel功能,可以把代码、市盈率、市值等指标导出,这样我们就有了所有的代码了。
2抓取数据代码
//由于同花顺导出来的xls,一直解析不了,不知道哪里有问题,所以我自己重新创建了一个xls,把同花顺的内容拷贝过去
package com.xreport2_demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.Put;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.matrix.ssm.service.impl.UserServiceImpl;
//http://f10.eastmoney.com/NewFinanceAnalysis/lrbAjax?companyType=4&reportDateType=0&reportType=1&endDate=&code=SH603893
public class HttpClientDemo {
private static Logger logger = Logger.getLogger(HttpClientDemo.class);
private static String columns[] = {"空白","代码", "名称","所属行业","TTM市盈率","净利润","市净率","总市值","流通市值"};
private static String columnsNew[] = {"空白 ","代码", "名称","所属行业","TTM市盈率","净利润","市净率","总市值","流通市值","研发费用","研发日期","研发费用与总市值比"};
// private static String columns[] = {"代码"};
public static void main(String[] args) throws Exception {
//由于同花顺导出来的xls,一直解析不了,不知道哪里有问题,所以我自己重新创建了一个xls,把同花顺的内容拷贝过去
//解析出excel中的数据
List<Map<String, String>> list = readExcel("D://data//1.xls", columns);
// int i=0;
for(Map map : list){
// if(i>=10){
// break;
// }
// i++;
//怕东方财富一下给我拉黑
Thread.sleep((int)Math.random()*1000);
//获取研发费用与研发日期,因为年报有的公司没有出
getCostResarch(map);
}
//将list的值写入到新的excel
exportExcel(list,"D://data//研发费用.xls");
}
/**
* 传入单元格中的
* @pa