1.通过网络爬虫–>爬取所需要的数据->股票实时价,最高价,最低价等等
2.通过python的->pandas库->进行数据整理清洗
神奇的网址
返回一个股票的数据:http://hq.sinajs.cn/list=sz000001,修改股票代码
上下正好一一对应.敲定了爬取内容剩下一切好办
返回一串股票的数据:http://hq.sinajs.cn/list=sh600000,sz000002,sz300001
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
1.退市停牌股票
通过开盘价来剔除
df[df["开盘价"]-0<0.00001]
2.如何区分退市和停牌
查看状态信息: -3是退市状态 03是停牌状态
3.当天新上市股票
注意:pre_close = 是股票发行价格
4.除权股票
当天除权,pre_close显示的是交易所所计算出来的价格61.78,分后后股票价格,而不是除权前一天正常的价格74.36,如果按照正常计算,涨跌幅就无法计算.