爬取东方财富的利润表数据记录

本文讲述了如何从东方财富网站抓取上市公司的研发费用数据。首先确定数据的key(RDEXP),然后分析请求的URL,发现数据是通过ajax获取。通过同花顺导出的Excel获取公司代码,但由于解析问题,作者重新创建了一个Excel文件导入数据。接下来的章节将展示具体的抓取代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想看看各家上市公司的研发费用,所以去东方财富里面抓取数据。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值