本片文章——by 包希仁
1
介绍一下如何用python采集选股宝的涨停信息——主要是涨停原因数据,以便在本地进行后续统计分析。
用到的开发工具 python3.6、pycharm、chrome
2
先用chrome找到选股宝涨停数据的网址,可以看到是个API——
直接访问API网址就能看到数据。
用request去获取,再进行解析就可以了。
3
为了方便复用,我们把访问网址获取数据功能放在一个类里,文件名collector.py,类名为Collector
import urllib.requestimport http.cookiejarimport timeclass 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
4
新建一个python文件,名为xuangubao.py,开始写选股宝数据获取类。
import datetime import json import pandas as pd from collector import Collector# 选股宝数据class Xuangubao(Collector): def __init__(self): Collector.__init__(self) pass def get_limitup_info(self): trade_date = self.get_recent_tradingday() url = 'https://flash-api.xuangubao.cn/api/pool/detail?pool_name=limit_up'content = self.requestURL(url) content = json.loads(content)if content["code"] != 20000:print(content)return None#content 就是数据了,是个listcontent = content["data"]#把数据放到dataframe中df_result = pd.DataFrame(content)#注意文件中的时间类型都是时间戳,可以格式化为字符串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("limit_up.csv",encoding="gbk",index=False)```code
if __name__=="__main__": cc=Xuangubao() cc.get_limitup_info()
5
获取到的dataframe,因为字段比较多,这里只显示一列——
保存成csv文件——
采集到数据之后,可以用python再对原因等字段进行格式化、拆分。那就属于数据清洗阶段了,本篇不再赘述。
选股宝对外提供了比较便捷的API,返回标准的JSON格式数据,只要进行简单的访问就可以获取内容,然后进行格式化存储到本地。
本文仅为学习之用,如有侵权,请联系删除。