股票爬虫

news/2024/10/18 14:16:05/

股票爬虫(第二篇:代码实现)

看不懂代码的同学可以去找第一篇看一看

第一篇点击此链接

文章目录

  • 股票爬虫(第二篇:代码实现)
  • 看不懂代码的同学可以去找第一篇看一看
    • 前言
    • 准备
      • 1、新建Maven项目
      • 2、需要的依赖、包
    • 代码编写
      • 1、获取网页返给我们的json
      • 2、太乱了,看的眼疼(那就数据清洗一下)
      • 3、数据的二次清洗,把数组进行格式化
      • 4、完美
      • 5、最后转换成csv文件
    • 完整代码
    • 打开csv文件,数据呈现
      • 确认信息含义
      • 你把鼠标放到网页图标上,然后再对应json信息即可

前言

​ 写爬虫程序,大家都知道python,其实还有java可以写爬虫,由于博主是大数据分析专业的,而大数据很多框架都和java有关系,所以本篇的代码实现是java。但是别走,此处提供的是思路,你把我的思路用python实现也是可以的。

准备

1、新建Maven项目

2、需要的依赖、包

这里我们需要的依赖有

<!-- 有java无UI浏览器美称的htmlunit(爬虫工具)-->
<dependency><groupId>net.sourceforge.htmlunit</groupId><artifactId>htmlunit</artifactId><version>2.49.1</version>
</dependency>
<!-- json的解析依赖-->
<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20210307</version>
</dependency>
<!-- 文件的输出依赖-->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version>
</dependency>

这里我们需要的导包有

//来自于htmlunit依赖
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebResponse;
//来自于commons-io依赖
import org.apache.commons.io.FileUtils;
//来自于org.json依赖
import org.json.CDL;
import org.json.JSONArray;
import org.json.JSONObject;
//java自己的包
import java.io.File;
import java.io.IOException;

代码编写

1、获取网页返给我们的json

image-20210423093155649

//使用指定的BrowserVersion创建web客户端实例。
WebClient webClient = new WebClient(BrowserVersion.CHROME);
String url = "http://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&klt=101&fqt=1&secid=0.000003&beg=0&end=20500000";
//方便的方法来构建一个URL并将其加载到当前的WebWindow中
Page page = webClient.getPage(url);
//返回最初用于创建此页的web响应
WebResponse response = page.getWebResponse();
//使用服务器响应中指定的字符集/编码,以字符串形式返回响应内容。
String json = response.getContentAsString();
输出一下,仅作测试,待会删掉
System.out.println(json);

image-20210423105603707

2、太乱了,看的眼疼(那就数据清洗一下)

根据观察,我们需要的数据藏在data对象的klines对象的数组

image-20210423110202604

那么我们先把data提炼出来,在刚才代码的基础上,再追加以下代码(你先了解json的语法,才能理解以下代码)

image-20210423110657494

//创建JSONObject,把整个json传进去
JSONObject jsonObject = new JSONObject(json);
//获取JSON中的对象
JSONObject mydata = jsonObject.getJSONObject("data");
//输出一下,仅作测试,待会删掉
System.out.println(mydata);

我们离klines只剩一点点了

image-20210423110356538

//获取对象中的数组
JSONArray myjsonarry = mydata.getJSONArray("klines");

image-20210423110849256

3、数据的二次清洗,把数组进行格式化

将这些json数组转换成字符串数组

// CDL支持JSON和逗号分隔列表之间的转换
// String de = CDL.rowToString(myjsonarry);
// 这里你可以输出以下看一下de是什么玩意
// 对字符串进行切片
String[] csv = CDL.rowToString(myjsonarry).split("\",\"");
//测试,记得删
for (String buffer:csv) {System.out.println(buffer);
}

然后你会发现csv[0]和csv[csv.length-1]这两个数组元素的头和尾还有个"

image-20210423111629317

image-20210423111611497

再次清洗

String[] buffer2 = csv[0].split("\"");
csv[0] = buffer2[1];
String[] buffer3 = csv[csv.length - 1].split("\"");
csv[csv.length - 1] = buffer3[0];//测试,记得删掉
for (String buffer:csv) {System.out.println(buffer);
}

4、完美

image-20210423111956012

5、最后转换成csv文件

for (String buffer:csv) {//第一个参数,创建一个文件//第二个参数,将字符串写入文件//第三个参数,这个文件的字符集/编码//第四个参数,是否是追加(这里填是),因为我是一个元素一个元素的写入FileUtils.writeStringToFile(new File("D://testdemo1.csv"), buffer+"\n","UTF-8",true);
}

完整代码

public class spiderdemo {public static void main(String[] args) throws IOException, InterruptedException {WebClient webClient = new WebClient(BrowserVersion.CHROME);String url = "http://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&klt=101&fqt=1&secid=0.000003&beg=0&end=20500000";Page page = webClient.getPage(url);WebResponse response = page.getWebResponse();String json = response.getContentAsString();JSONObject jsonObject = new JSONObject(json);JSONObject mydata = jsonObject.getJSONObject("data");JSONArray myjsonarry = mydata.getJSONArray("klines");// CDL支持JSON和逗号分隔列表之间的转换// String de = CDL.rowToString(myjsonarry);// 这里你可以输出以下看一下de是什么玩意// 对字符串进行切片String[] csv = CDL.rowToString(myjsonarry).split("\",\"");String[] buffer2 = csv[0].split("\"");csv[0] = buffer2[1];String[] buffer3 = csv[csv.length - 1].split("\"");csv[csv.length - 1] = buffer3[0];for (String buffer : csv) {FileUtils.writeStringToFile(new File("D://testdemo1.csv"), buffer+"\n","UTF-8",true);}webClient.close();}
}

打开csv文件,数据呈现

确认信息含义

这里没有表头,你不知道这些字段是什么对吧?

image-20210423112608672

你把鼠标放到网页图标上,然后再对应json信息即可

image-20210423112914609
image-20210423113036671


http://www.ppmy.cn/news/794240.html

相关文章

JAVA+MYSQL可视化学生信息管理系统

掌握数据库连接Java程序可视化界面的流程&#xff0c;有效编写Java可视化界面程序及其功能&#xff08;增删改查&#xff09;&#xff0c;了解数据库内容编写和连接的流程。 定义变量&#xff1a;Sno(String),Sname(String),_Class(String),Age(int),Sex(String) public class…

股票买卖明细接口是怎样实现查询交易数据的?

股票买卖明细接口作为软件应用而言&#xff0c;很多资源和数据不一定就是由其自身提供的&#xff0c;所以说某些功能还是需要调用第三方提供的服务&#xff0c;这其中就涉及到API接口的调用。也就是说&#xff0c;股票买卖明细接口是与数据端直接挂钩的&#xff0c;通过一些量化…

l2数据接口如何获取股票实时行情数据?

l2数据接口在股票交易中常常需要挖掘股票数据&#xff0c;可以是l1和l2接口来执行获取股票实时行情数据的原理&#xff0c;将自己需要查询的需求就可以数据接口上搜索就可以很快的获取数据了。那么&#xff0c;在获取的过程中&#xff0c;是需要基于开发员将股票数据接口介入开…

股市量化交易接口如何获取A股历史数据?

股市量化交易接口其实也是对散户开放等是比较安全稳定接口&#xff0c;但是其接口通过第三方券商完成交易&#xff0c;主要用做于个人或机构做私募等量化投资数据参考的首选&#xff0c;比如说在股市中进行量化投资时&#xff0c;通过接口策略的定制将股票数据快速筛选&#xf…

Redis 删除 key用 del 和 unlink 有啥区别?

问题 del 和 unlink 有啥区别啊&#xff1f;为什么String类型删除不会做异步删除&#xff1f; 彬彬回答 DEL 和 UNLINK 都是同步的释放 key 对象&#xff0c;区别是怎么释放后面的 value 对象 DEL 每次都是同步释放 value 部分&#xff0c;如果 value 很大&#xff0c;例如一…

量化股票交易接口如何一键执行委托下单?

大家都知道&#xff0c;我们平时在进行股票交易时候&#xff0c;只需要在手机或者电脑上打开量化股票交易接口系统一键点买入和卖出&#xff0c;就简单的完成了对应的股票就在二级市场的股票交易。当然了&#xff0c;我们在完成这笔交易都是需要有对应的程序来处理&#xff0c;…

ctp交易接口股票怎么查询历史数据?

针对于ctp交易接口股票历史数据的查询&#xff0c;其基本原理就是利用api接口开发子系统最终就是开发完成并暴露一个标准的HTTPAPI接口&#xff0c;并将接口注册和接入到API网关。API设计和开发的核心思想仍然应该是基于领域对象建模驱动&#xff0c;通过领域对象建模很好的实现…

f5故障排除

1.硬件问题 1&#xff09;硬盘&#xff1a;查看/var/log/daemon, kern日志&#xff0c;smartctl测试&#xff0c;EUD 2&#xff09;PSU: 查看LCD报警&#xff0c;/var/log/ltm&#xff0c;EUD等 3&#xff09;内存&#xff1a;可能导致设备突然重启或无法启动&#xff0c;查看c…