利用Python 爬取股票实时数据详情
东方财富网地址如下:
http://quote.eastmoney.com/center/gridlist.html#hs_a_board
我们通过点击该网站的下一页发现,网页内容有变化,但是网站的 URL 却不变,也就是说这里使用了 Ajax 技术,动态从服务器拉取数据,这种方式的好处是可以在不重新加载整幅网页的情况下更新部分数据,减轻网络负荷,加快页面加载速度。
我们通过 F12 来查看网络请求情况,可以很容易的发现,网页上的数据都是通过如下地址请求的
http://38.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112409036039385296142_1658838397275&pn=3&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1658838404848
接下来我们多请求几次,来观察该地址的变化情况,发现其中的pn
参数代表这页数,于是,我们可以通过修改&pn=
后面的数字来访问不同页面对应的数据
import requests json_url = "http://48.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112402508937289440778_1658838703304&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1658838703305" res = requests.get(json_url)
数据处理 接下来我们观察返回的数据,可以看出数据并不是标准的 json 数据
于是我们先进行 json 化:
result = res.text.split("jQuery112402508937289440778_1658838703304")[1].split("(")[1].split(");")[0] result_json = json.loads(result) result_json
Output:
返回各参数对应含义:
- f2:最新价
- f3:涨跌幅
- f4:涨跌额
- f5:成交量(手)
- f6:成交额
- f7:振幅
- f8:换手率
- f9:市盈率
- f10:量比
- f12:股票代码
- f14:股票名称
- f15:最高
- f16:最低
- f17:今开
- f18:昨收
- f22:市净率
先准备一个存储函数
def save_data(data, date): if not os.path.exists(r'stock_data_%s.csv' % date): with open("stock_data_%s.csv" % date, "a+", encoding='utf-8') as f: f.write("股票代码,股票名称,最新价,涨跌幅,涨跌额,成交量(手),成交额,振幅,换手率,市盈率,量比,最高,最低,今开,昨收,市净率\n") for i in data: Code = i["f12"] Name = i["f14"] Close = i['f2'] ChangePercent = i["f3"] Change = i['f4'] Volume = i['f5'] Amount = i['f6'] Amplitude = i['f7'] TurnoverRate = i['f8'] PERation = i['f9'] VolumeRate = i['f10'] Hign = i['f15'] Low = i['f16'] Open = i['f17'] PreviousClose = i['f18'] PB = i['f22'] row = '{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}'.format( Code,Name,Close,ChangePercent,Change,Volume,Amount,Amplitude, TurnoverRate,PERation,VolumeRate,Hign,Low,Open,PreviousClose,PB) f.write(row) f.write('\n') else: ...
然后再把前面处理好的 json 数据传入:
stock_data = result_json['data']['diff'] save_data(stock_data, '2022-07-28')
这样我们就得到了第一页的股票数据:
最后我们只需要循环抓取所有网页即可:
for i in range(1, 5): print("抓取网页%s" % str(i)) url = "http://48.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112402508937289440778_1658838703304&pn=%s&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1658838703305" % str(i) res = requests.get(json_url) result = res.text.split("jQuery112402508937289440778_1658838703304")[1].split("(")[1].split(");")[0] result_json = json.loads(result) stock_data = result_json['data']['diff'] save_data(stock_data, '2022-07-28')
这样我们就完成了整个股票数据的抓取,
到此这篇关于利用Python 爬取股票实时数据详情的文章就介绍到这了,更多相关 Python 爬取股票数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
tensorflow1.15与numpy、keras以及Python兼容版本对照方式
这篇文章主要介绍了tensorflow1.15与numpy、keras以及Python兼容版本对照方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-03-03pandas中concatenate和combine_first的用法详解
本文主要介绍了pandas中concatenate和combine_first的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-01-01Python使用django框架实现多人在线匿名聊天的小程序
很多网站都提供了在线匿名聊天的小功能,下面小编基于python的django框架实现一个多人在线匿名聊天的小程序,具体实现代码大家参考下本文2017-11-11
最新评论