大体思路:先爬所有的股票代码,再通过股票代码获取详细数据
首先进行页面分析,打开http://quote.eastmoney.com/center/gridlist.html#sh_a_board
按F12找数据来源接口,
发现参数pn为页数,则构建request请求,遍历每一页,f12为股票代码,对返回的数据进行处理
sh_list = request.urlopen(request.Request(
url=url, headers=header_dict)).read().decode(encoding='utf-8')
'''字符串处理获取股票代码'''
reg=re.compile(r'(?<=f12":")\d{6}')
all_items = re.findall(reg,sh_list)
return all_items
sz_alllist=[]
for x in range(1,113):
sz_alllist+=get_sz(str(x))
得到上证A股的股票代码文件
深证同理,不过深证的股票代码有的是0开头的,存进去后需要改一下单元格格式填充前面缺失的0
接下来随便打开一个股票详情页面,http://quote.eastmoney.com/sh600778.html
F12抓包发现似乎是之前遇到过的数据绑定,则如果通过request来爬取的话,看不到数据,测试了一下发现数据的位置变成了横杠-,所以还是继续找接口来直接爬接口,
找到接口以后发现页面会一直刷新,服务器会不断的推送新的数据,有时候久的时候要等几分钟才能全部接受完返回,一开始不断怎么解决,后面尝试把接口原本的sse改成get,就解决问题了。而且参数fields就是请求的数据,可以根据自己的需求来请求数据,我这里就需要
大概这些吧 然后还是老套路,访问接口接受数据存储
with request.urlopen(req2) as f:
data_str=f.read().decode('utf-8').split('"data":')[1][:-1] #对返回的数据进行切割切片处理
data_dict=json.loads(data_str) #将字符串转为字典对象
这里因为返回的数据是字符串,而且刚好是字典类型的,利用json库的loads方法转换为字典,再自己新建一个字典定义数据的键
大体就这样代码在附件里,有什么问题可以留言评论,代码仅供学习使用,切勿用于其他用途,后果自己承担