繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

选股宝涨停原因数据清洗

作者/专门套利 2019-05-10 02:09 0 来源: FX168财经网人物频道


原文提供了从选股宝API获取数据的代码,本文在原代码基础上对数据进行处理,有需要的可在此基础上增加其他数据内容的处理。因为格式问题,引用的时候要稍微调整下。

collector.py代码:

import urllib.request
import http.cookiejar
import time
import datetime

class Collector(object):
   def init(self):
       self.cookies = http.cookiejar.CookieJar()
       self.handler=urllib.request.HTTPCookieProcessor(self.cookies)
       self.opener = urllib.request.build_opener(self.handler)

def requestURL(self,url):retryCount = 200while retryCount>0:
        retryCount = retryCount-1try:
            response = self.opener.open(url)return response.read()except Exception as e:
            print(url,e,datetime.datetime.now())
            time.sleep(0.7)continue

xuangubao.py代码:

-- coding: utf-8 --

import datetime
import json
import pandas as pd
from collector import Collector
from jqdatasdk import *

auth('*', '*')

class Xuangubao(Collector):
   def init(self):
       Collector.init(self)
       pass

def get_limitup_info(self):# trade_date = self.get_recent_tradingday()#trade_date = '2019-03-1'trade_date = datetime.datetime.now()print(trade_date)#url = 'https://flash-api.xuangubao.cn/api/pool/detail?pool_name=limit_up'url = 'https://flash-api.xuangubao.cn/api/pool/detail?pool_name=limit_up'content = self.requestURL(url)
    content = json.loads(content)#print(content)if content["code"] != 20000:print(content)return None# content 就是数据了,是个listcontent = content["data"]# 把数据放到dataframe中df_result = pd.DataFrame(content)
    stock_code = []
    stock_name = []
    stock_reason = []
    plate_name = []
    plate_reason = []
    turnover_ratio = []
    volume_bias_ratio = []for i in range(0,len(list(df_result['stock_chi_name']))):

        stock_code.append(df_result.iloc[i]['surge_reason']['symbol'][:6])
        stock_name.append(df_result.iloc[i]['stock_chi_name'])
        stock_reason.append(df_result.iloc[i]['surge_reason']['stock_reason'])
        plate_name.append(df_result.iloc[i]['surge_reason']['related_plates'][0]['plate_name'])
        try:
            plate_reason.append(df_result.iloc[i]['surge_reason']['related_plates'][0]['plate_reason'])
        except:
            plate_reason.append('NA')
            pass
        turnover_ratio.append(df_result.iloc[i]['turnover_ratio'])
        volume_bias_ratio.append(df_result.iloc[i]['volume_bias_ratio'])print (stock_code)print(stock_name)print(stock_reason)
    df1 = pd.DataFrame(stock_code, columns=['股票代码'])

    df1['股票名称'] = pd.Series(stock_name, index=df1.index)
    df1['涨停原因'] = pd.Series(stock_reason, index=df1.index)
    df1['板块'] = pd.Series(plate_name, index=df1.index)
    df1['板块原因'] = pd.Series(plate_reason, index=df1.index)
    df1['换手率'] = pd.Series(turnover_ratio, index=df1.index)
    df1['volume_bias_ratio'] = pd.Series(volume_bias_ratio, index=df1.index)#df1=df1[df1['板块']!='ST股']#过滤STdf1 = df1[df1['板块'] != 'ST股']#过滤创业板,可以根据情况取消df2 = df1[(df1['股票代码']) < '300000']
    df3 = df1[(df1['股票代码']) > '400000']
    df1 = pd.concat([df2, df3])for i in range(0, len(list(df1['股票代码']))):#print("df1:")for j in range(0, len(list(df_result['stock_chi_name']))):if df1['股票名称'].iloc[i]==df_result['stock_chi_name'].iloc[j]:

                df1['股票代码'].iloc[i] = df_result['symbol'].iloc[j]# 注意文件中的时间类型都是时间戳,可以格式化为字符串df_result['first_break_limit_down'] = df_result['first_break_limit_down'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['first_break_limit_up'] = df_result['first_break_limit_up'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['first_limit_down'] = df_result['first_limit_down'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['first_limit_up'] = df_result['first_limit_up'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['last_break_limit_down'] = df_result['last_break_limit_down'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['last_break_limit_up'] = df_result['last_break_limit_up'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['last_limit_down'] = df_result['last_limit_down'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['last_limit_up'] = df_result['last_limit_up'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['listed_date'] = df_result['listed_date'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))
    df_result['new_stock_break_limit_up'] = df_result['new_stock_break_limit_up'].apply(
        lambda x: datetime.datetime.utcfromtimestamp(x).strftime("%Y-%m-%d %H:%M:%S"))# 保存文件或者存数据库,之后就可以在本地进行统计分析了df_result.to_csv("F:\limit_up.csv", encoding="gbk", index=False)
    df1.to_csv("F:\chulihou.csv", encoding="gbk", index=False)print("all done")

if name == "main":
   cc = Xuangubao()
   cc.get_limitup_info()Img

分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2208文章4145粉丝45

    暂无个人简介信息

  • 张迎妤

    人气1904文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 指导老师

    人气1864文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2320文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 梁孟梵

    人气2184文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 王启蒙现货黄金

    人气320文章3491粉丝8

    本人做分析师以来,并专注于贵金属投资市场,尤其是在现货黄金...

  • 金泰铬J

    人气2328文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4760文章8329粉丝119

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...

FX168财经

FX168财经学院

FX168财经

FX168北美