查看原文
其他

爬取东方财富网当日股票交易情况

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:左从江(投稿)

文字编辑:钱梦璇

技术总编:张   邯
介绍爬虫内容
爬虫的第一步是得到数据的存放地址,因此,爬取股票行情数据之前,第一步的工作是解析网页,寻找数据的url。

东方财富网股票行情界面如图

此页面的链接为:

http://quote.eastmoney.com/center/gridlist.html#hs_a_board

在浏览器地址栏内输入此链接可以正常访问,但是通过requests库请求并没有得到关于股票行情的数据,在任意股票上右击查看源码,发现网站把数据储存在json对象中:

通过搜索某一只股票的名称,找到对应的地址,所有股票的信息都保存在了这个链接指向的对象中:

url:

http://98.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124034962033822322613_1582007856997&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2,m:1+t:23&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&_=1582007856998

粘贴到地址栏,我们发现返回了20条股票信息,查看url的组成,存在一项“pz=20”的句子,大胆猜测这表示返回20条信息,如果改成20000是否会返回更多数据呢?

尝试后,确实如假设所想,返回了3912条股票数据(沪深A股总的数量),至此,我们得到了数据的存放地址,通过requests库可以直接返回json数据,这实在是太方便了。

爬取数据并处理
import requests,re,jsonfrom bs4 import BeautifulSoupimport pandas as pd#指定连接url = r'http://21.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112407201580659678162_1581950914193&pn=1&pz=20000&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2,m:1+t:23&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&_=1581950914194'#定义请求头headers = {'UserAgent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'}#获取数据html=requests.get(url,headers = headers)

查看返回的信息,发现我们需要的数据储存在"diff"这个列表中,或者说是在json数据的第6个元素中,但是与干净的json数据不同,这里前多了42个字符,后多了2个字符,因此需要删除多余字符,否则json将无法解析。

#提取json数据jsons = html.text[42:-2]#将正确格式的str格式转为json格式text_json = json.loads(jsons)#利用pandas储存数据到excelpd.DataFrame((text_json['data']['diff'])).to_excel(r'Path\abc.xlsx')
查看结果:

初步的结果如上图所示,标题并不直观,需要重新定义,因此,在东财网站中检查“名称”这一项的源码,可以找到各“fxx”的含义,而且通过重新定义请求链接,我们可以控制返回数据的类型,也即:删除不需要的列。

标题行数据的储存地址:

http://quote.eastmoney.com/center/js/gridlist3.min.js?v=200115170204531&v=ckdJ099tmGa5K6pqPzMnueRq_2nTrq8DkG9r0SZ0xtg

按照json格式解析后,可以得到:

上图是标题行代码的含义(fxx),按照此表查询可以定制请求链接,按照需求返回股票信息。

最终经过整理,得到Excel如图:

至此完成了东财网站的每日股票交易数据的爬取过程。







对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

stata调用python爬取时间数据——借他山之石以攻玉

全国31省GDP排行强势登场!

接力《发哨子的人》Stata版
批量实现WORD转PDF

Stata有问必答环节

我听到了企业的哀鸣
“物以类聚”、“近朱者赤”——机器学习初探之KNN
SFI:Stata与Python的数据交互手册(二)

从流调数据中寻找感染真相

熟悉又陌生的reshape

NBA球员薪资分析——基于随机森林算法(二)

NBA球员薪资分析——基于随机森林算法(一)

高亮输出之唐诗作者

湖北省各市疫情数据爬取

古代诗人总去的这些地方你一定要知道!

DataFrame数组常用方法(二)

ftools命令——畅游大数据时代的加速器

卫健委的“糊涂账”

Pandas中数据的排序与切片

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存