实时获取股票数据

(1)实现步骤

1.通过网络爬虫–>爬取所需要的数据->股票实时价,最高价,最低价等等
2.通过python的->pandas库->进行数据整理清洗

(2)实现前的准备工作

神奇的网址
返回一个股票的数据:http://hq.sinajs.cn/list=sz000001,修改股票代码
在这里插入图片描述在这里插入图片描述上下正好一一对应.敲定了爬取内容剩下一切好办
返回一串股票的数据:http://hq.sinajs.cn/list=sh600000,sz000002,sz300001

(4)手撸代码

import requests   # 爬虫库
import pandas as pd  # 数据清洗库
"""在大范围爬取之前,很有必要先尝试一个小demo,测试一下所想和取得的是否对应
为了更全面测试这里分多种情况,正常股票sh600000退市股票:sh600002停牌股票:sz300124,除权股票:sh600276,上市新股:sz002952"""
stock_code_list = ["sh600000","sh600002","sz300124","sh600276","sz002952"]
url = "http://hq.sinajs.cn/list="+",".join(stock_code_list)
# 设置请求头
headers = {"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
           " AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 			 Safari/537.36"}
response = requests.get(url).text # 获取的文本内容
content = response.strip()  # 把前后空白字符去除一下
data_line = content.split("\n")
data = [i.replace("var hq_str_"," ").split(",") for i in data_line]
df = pd.DataFrame(data,dtype=float)  # 创建DataFrame
df[0] = df[0].str.split('="')
df['stock_code'] = df[0].str[0].str.strip()
df["stock_name"] = df[0].str[-1].str.strip()
# del df[0]
df["candle_end_time"] = df[30]+" "+df[31]
df["candle_end_time"] = pd.to_datetime(df["candle_end_time"])
# 其中amount单位是股,volume单位是元
# 买1,卖1都有真心是不错的一个数据源
rename_dict={1:"开盘价",2:"pre_close",3:"收盘价",4:"最高价",5:"最低价",6:"买1价",7:"卖1价",8:"成交金额(元)",9:"成交量(股)",32:"状态"}
df.rename(columns = rename_dict,inplace=True)
df["状态"] = df["状态"].str.split('";').str[0]
df = df[["开盘价","pre_close","收盘价","最高价","最低价","买1价","卖1价","成交金额","成交量","状态","stock_code","stock_name","candle_end_time"]]
df

在这里插入图片描述得到以上的一个DataFrame格式的干净数据.

(5)异常情况

1.退市停牌股票
通过开盘价来剔除

df[df["开盘价"]-0<0.00001]

2.如何区分退市和停牌
查看状态信息: -3是退市状态 03是停牌状态
在这里插入图片描述3.当天新上市股票
注意:pre_close = 是股票发行价格

4.除权股票
当天除权,pre_close显示的是交易所所计算出来的价格61.78,分后后股票价格,而不是除权前一天正常的价格74.36,如果按照正常计算,涨跌幅就无法计算.
在这里插入图片描述在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐