系列文章目录

待补充


目录

系列文章目录

前言

一、基础类实现

二、实现日交易数据爬取

1.实现日交易数据爬取

2.东财日交易数据数据库脚本

3.调用

总结



前言

量化交易系统过程中,我们需要先获取交易数据,我们来实现一个日交易数据的爬取。首先实现一个交易说句获取的基础类;其次,基于基础类实现东财交易数据的获取


提示:以下是本篇文章正文内容,下面案例可供参考

一、基础类实现

TradeDaily的基础类

import jsonclass TradeDaily():def tradeDailyData(self, tradeDay, repoistory, repoistoryParam: dict, crawlerParam: dict):passdef get_data(self,response):content = response.textdata = json.loads(content)# data = json.dumps(data)return data

二、实现日交易数据爬取

1.实现日交易数据爬取

import requests
import jsonpath
import pandas as pd
import math
from crawler.base.tradeDaily import TradeDaily'''
https://data.eastmoney.com/bbsj/lrb.html   #利润表
https://data.eastmoney.com/stockcomment/   #千股千评'''
class EmPcTradeDaily(TradeDaily):def __init__(self,repoistoryOb,reParam:dict,crParam:dict):self.repoistoryObject=repoistoryObself.repoistoryParam=reParamself.crawlerParam=crParam'''f2:最新价 f3:涨跌幅 f4:涨跌额 f5:成交量 f6:成交额 f7:振幅 f8:换手率 f9:市盈率(动态) f10:量比f12:股票账号 f13:市场(90、) f14:股票名称 f15:最高价  f16:最低价  f17:今天开盘价格 f18:昨日收盘价无f19 f20:总市值 f21:流通市指 f23:市净率 f62:主力净流出'''def get_detail_response(self, page_num):response = requests.get('http://29.push2.eastmoney.com/api/qt/clist/get?pn=' + str(page_num) + '&pz=200&po=0&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f12&fs=m%3A0+t%3A6%2Cm%3A0+t%3A80%2Cm%3A1+t%3A2%2Cm%3A1+t%3A23%2Cm%3A0+t%3A81+s%3A2048&stat=1%5E&fields=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6%2Cf7%2Cf8%2Cf9%2Cf10%2Cf12%2Cf13%2Cf14%2Cf15%2Cf16%2Cf17%2Cf18%2Cf20%2Cf21%2Cf23%2Cf24%2Cf25%2Cf22%2Cf11%2Cf62%2Cf128%2Cf136%2Cf115%2Cf152&_=1649293499568')return response'''"SECURITY_CODE":"600532","SECUCODE":"600532.SH","SECURITY_NAME_ABBR":"未来股份","ORG_CODE":"10002612","TRADE_MARKET":"069001001001","BOARD_CODE":"016011","BOARD_NAME":"煤炭行业","ORIG_BOARD_CODE":"437","TOTAL_MARKET_CAP":7586166084,"NOTLIMITED_MARKETCAP_A":7586166084,"CLOSE_PRICE":14.7,"CHANGE_RATE":0,"TOTAL_SHARES":516065720,"FREE_SHARES_A":516065720,"PE_TTM":-8374.35511122,"PE_LAR":346.36570245,"PB_MRQ":4.06484132,"PCF_OCF_LAR":11.16401607,"PCF_OCF_TTM":7.8371549,"PS_TTM":3.64534103,"PEG_CAR":1899.40065664655,"TRADE_DATE":"2022-05-27 00:00:00"'''def get_industry_response(self, date_str):response = requests.get('https://datacenter-web.eastmoney.com/api/data/v1/get?reportName=RPT_VALUEANALYSIS_DET&columns=ALL&quoteColumns=&source=WEB&client=WEB&sortColumns=PE_TTM&sortTypes=1&filter=(TRADE_DATE%3D%27'+date_str+'%27)&_=1653800608054')print('请求URL='+response.url)# print('返回结果='+response.text)return responsedef get_stock_info_detail(self) -> pd.DataFrame:page_num, page_size = 1, 1stock_detail_info = Nonerename_columns={'f12':'stock_code','f14':'stock_name','f2':'close','f3':'pct_chg','f4':'change','f5':'volume','f6':'amount','f15':'high','f16':'low','f17':'open','f18':'pre_close','f8':'turnover_rate','f9':'stock_pe_ttm','f23':'stock_pb_mrq','f10':'quantity_ratio'}filter_columns=['stock_code', 'stock_name', 'close','pct_chg','change','volume','amount','high','low','open','pre_close','turnover_rate','quantity_ratio']while page_num <= page_size:response= self.get_detail_response(page_num)data = self.get_data(response)page_size = math.ceil(data['data']['total'] / 200)data_list = data['data']['diff']df = pd.DataFrame(data_list)df.rename(columns=rename_columns,inplace=True)df = df.loc[:, filter_columns]if stock_detail_info is None:stock_detail_info = dfelse:stock_detail_info = pd.concat([stock_detail_info,df])page_num = page_num + 1# 过滤停牌和下市的数据stock_detail_info = stock_detail_info.replace('-', 0)print('股票明细数量:', len(stock_detail_info))# stock_detail_info.to_csv("D:\sstock_detail_info.csv")stock_detail_info.drop_duplicates(inplace=True)print('股票明细数量:', len(stock_detail_info))return stock_detail_info'''"SECURITY_CODE":"600532","SECUCODE":"600532.SH","SECURITY_NAME_ABBR":"未来股份","ORG_CODE":"10002612","TRADE_MARKET":"069001001001","BOARD_CODE":"016011","BOARD_NAME":"煤炭行业","ORIG_BOARD_CODE":"437","TOTAL_MARKET_CAP":7586166084,"NOTLIMITED_MARKETCAP_A":7586166084,"CLOSE_PRICE":14.7,"CHANGE_RATE":0,"TOTAL_SHARES":516065720,"FREE_SHARES_A":516065720,"PE_TTM":-8374.35511122,"PE_LAR":346.36570245,"PB_MRQ":4.06484132,"PCF_OCF_LAR":11.16401607,"PCF_OCF_TTM":7.8371549,"PS_TTM":3.64534103,"PEG_CAR":1899.40065664655,"TRADE_DATE":"2022-05-27 00:00:00"'''def save_industry_Info(self,tradeDay) -> pd.DataFrame:page_num, page_size = 1, 1rename_cols={'SECURITY_CODE':'stock_code','BOARD_CODE':'board_code','PE_TTM':'stock_pe_ttm'}print('查询行业开始处理{0}日,第{1}页处理数据'.format(tradeDay,page_num))response = self.get_industry_response(tradeDay)data = self.get_data(response)data_list = data['result']['data']industry_info = pd.DataFrame(data_list)industry_info.rename(columns=rename_cols,inplace=True)industry_info['market_code'] = industry_info['SECUCODE'].str[7:9]industry_info = industry_info.loc[:, [ 'board_code','stock_code','market_code','stock_pe_ttm']]industry_info.drop_duplicates(inplace=True)print('行业数量:', len(industry_info))return industry_infodef get_stock_median(self,stock_info:pd.DataFrame) -> pd.DataFrame:stock_info=stock_info[stock_info['stock_pe_ttm']>0]board_code_info = stock_info.groupby(['board_code'])new_rows = []for name, itemgroup in board_code_info:new_row = list()new_row.extend([name,round(itemgroup['stock_pe_ttm'].median(), 2),round(itemgroup['stock_pe_ttm'].mean(),2)])new_rows.append(new_row)median_info = pd.DataFrame(data=new_rows,columns=['board_code', 'median_pe','average_pe'])print('行业中位市盈率数量:', len(median_info))median_info.drop_duplicates(inplace=True)print('行业中位市盈率数量:', len(median_info))return median_infodef tradeDailyData(self, tradeDay):stock_detail_info=self.get_stock_info_detail()stock_detail_info = stock_detail_info.assign(trade_date=tradeDay)industry_info = self.save_industry_Info(tradeDay)median_info = self.get_stock_median(industry_info)industry_median_info = pd.merge(industry_info, median_info, how='left', left_on='board_code', right_on='board_code')info = pd.merge(stock_detail_info, industry_median_info, how='left', left_on='stock_code', right_on='stock_code')# info.to_csv("E:\quant_data\\em_trade_daily_industry" + tradeDay + ".csv")print('开始插入数据库')self.repoistoryObject.saveData(info, repoistoryParam=self.repoistoryParam)

2.东财日交易数据数据库脚本

-- quantdata.trade_daily_empc definitionCREATE TABLE `trade_daily_empc` (`stock_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '股票名称',`stock_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '股票指数代码',`trade_date` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '交易日',`open` float(10,2) DEFAULT NULL COMMENT '开盘点位',`high` float(10,2) DEFAULT NULL COMMENT '最高点位',`low` float(10,2) DEFAULT NULL COMMENT '最低点位',`close` float(10,2) DEFAULT NULL COMMENT '收盘点位',`pre_close` float(10,2) DEFAULT NULL COMMENT '昨日收盘点',`change` float(10,2) DEFAULT NULL COMMENT '涨跌点',`pct_chg` float(10,2) DEFAULT NULL COMMENT '涨跌幅(%)',`volume` float(20,2) DEFAULT NULL COMMENT '成交量(手)',`amount` float(20,2) DEFAULT NULL COMMENT '成交额(千)',`quantity_ratio` float(50,2) DEFAULT NULL COMMENT '量比',`turnover_rate` float(10,2) DEFAULT NULL COMMENT '换手率',`industry_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '行业名称',`stock_pe_ttm` float(20,2) DEFAULT NULL COMMENT '市盈率TTM',`stock_pb_mrq` float(20,2) DEFAULT NULL COMMENT '市净率',`stock_pe_percentile` float(10,4) DEFAULT NULL COMMENT '市盈率百分位',`stock_pb_percentile` float(10,4) DEFAULT NULL COMMENT '市净率百分位',`board_code` varchar(20) DEFAULT NULL COMMENT '行业编号',`market_code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '市场',`average_pe` float(10,4) DEFAULT NULL COMMENT '行业平均市盈率',`average_pb` float(10,4) DEFAULT NULL COMMENT '平均市净率',`pe_percentile` float(10,4) DEFAULT NULL COMMENT '行业市盈率百分比',`pb_percentile` float(10,4) DEFAULT NULL COMMENT '行业平均市净率',`current_year_percent` float(10,4) DEFAULT NULL COMMENT '年初至今涨幅',`market_capital` float(20,4) DEFAULT NULL COMMENT '市值',`dividend_yield` float(10,4) DEFAULT NULL COMMENT '股息率',`stock_ps_percentile` float(10,4) DEFAULT NULL COMMENT '市销率',`median_pe` float(10,4) DEFAULT NULL COMMENT '市盈率中位数',PRIMARY KEY (`stock_code`,`trade_date`),KEY `inx_tdn_trade_date` (`trade_date`) USING BTREE COMMENT '按日期查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='股票日交易PC';

3.调用

代码如下,调用时传入日期可实现获取交易数据,并落入mysql库中

    def empctradeDaily(self,tradeDay):reParam = {'table_name': 'trade_daily_empc'}#网络爬虫处理,mysql存储tradedaily = EmPcTradeDaily(MysqlRepoistory(),reParam,None)tradedaily.tradeDailyData(tradeDay=tradeDay)

总结

以上就是今天要讲的内容,本文主要介绍了爬取交易数据,下章介绍获取其他交易数据

第2章 爬虫系列-爬取交易数据相关推荐

  1. 初识Python爬虫----如何爬取网络数据

    一.什么是网络爬虫 即爬取网络数据的虫子,也就是Python程序. 二.爬虫的实质是什么? 模拟浏览器的工作原理,向服务器发送请求数据. 三.浏览器的工作原理是什么? 浏览器还可以起到翻译数据的作用. ...

  2. boss直聘账号异常登不上_python爬虫Scrapy:爬取boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  3. 爬虫 spider09——爬取指定数据,去重复,并存储到mysql

    爬取指定数据,去重复,并存储到mysql. 技术栈:Springboot+ssm+定时(定时器)爬取+redis去重+mybatis保存 一.创建父项目Spider pom.xml <?xml ...

  4. 爬虫练习--爬取股票数据

    爬取股票数据 步骤 从东方财富网找到上市公司的股票代码并保存 根据股票代码去百度股市通去查找相关股票的具体信息并保存 代码 #-*- coding:utf-8 -*- import requests ...

  5. 【Python爬虫】爬取大量数据网络超时的解决思路

    问题 在爬取大量数据的过程中,有时没有注意,会出现网络超时,结果也不知道爬到了哪里,重新爬一遍代价太大. 解决思路 目前提供解决思路,实践之后补充示例代码. 思路一 1.设置超时处理,超过时间返回异常 ...

  6. Pycharm + python 爬虫简单爬取网站数据

    本文主要介绍简单的写一个爬取网站图片并将图片下载的python爬虫示例. 首先,python爬虫爬取数据,需要先了解工具包requests以及BeautifulSoup requests中文文档:ht ...

  7. 如何使用爬虫语言爬取网页数据?

    爬虫开发 基础概念我们已经讲完,怎么来开发个爬虫呢?举个栗子: 如图,是星斗苍凉.月色照亮的动漫斗罗大陆的播放页面.我们以此为例,开发爬虫来获取页面数据. Java爬虫 Java爬虫的开发主要使用Js ...

  8. 【python爬虫】爬取网站数据,整理三句半语料数据集

    因为目前没有公开的三句半语料库,所以在网络上爬取一些网站上公开的三句半数据. 主要分为两部分: 目录 爬取数据 清洗数据 爬取数据 以爬取 http://p.onegreen.net/JuBen 上的 ...

  9. python爬取网页内容_你以为Python爬虫只能爬取网页数据吗?APP也是可以的呢!

    摘要 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1 抓取APP数据包 方法详细可以参考这篇博文:http://my. ...

最新文章

  1. 命名实体识别入门教程(必看)
  2. DPI — nDPI — 安装部署与应用示例
  3. 一次使用Eclipse Memory Analyzer分析weblogic内存溢出
  4. 10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据
  5. 前端学习(1319):node.js异步编程
  6. php新特性:trait 关键字使用
  7. Mindis(HDU-6670)
  8. 【STM32】【STM32CubeMX】STM32CubeMX的使用之二:外部中断
  9. Android 系统(40)--Android7.0 PowerManagerService亮灭屏分析(一)
  10. 消息称苹果、Epic开庭时间从2021年7月提前至5月份
  11. (六)多语言人工智能语言翻译
  12. 9.27 csp-s模拟测试53 u+v+w
  13. Window10上使用Git与Github远程仓库互连
  14. 界面开发的推荐色值, dip,px,pt,sp 的区别
  15. vray5.1 for sketchup 安装教程
  16. 计算T临界值分布的表
  17. 【Atomikos】分布式事务简单示例
  18. 你真的理解什么是“财富自由”吗?
  19. OpenCV调用摄像头录像并保存下来
  20. Linux系统启动流程及服务管理控制

热门文章

  1. 计算机联锁的结构和工作原理,计算机联锁系统冗余结构的设计
  2. Java的Swing在界面的JPanel面板中中添加图片
  3. vue element ui里的日期时间选择器 中国标准时间转化为年月日时分秒
  4. 复旦非全日制研究生计算机,2018年复旦大学信息科学与工程学院非全日制招生计划...
  5. java语句的用途是什么_continue语句的作用是什么
  6. Run、RunOnce 键值解析
  7. VUE+ElementUI+PHP+MySQL实现仿照印记中文网站(1)----概述
  8. Adobe Acrobat DC详细安装
  9. 华为无线AC双机热备三层组网配置案例
  10. audio插入背景音乐_在HTML中添加背景音乐