查看原文
其他

爬虫实战 | 爬取东方财富网经济数据——以居民消费价格指数(CPI)为例

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

本文作者:乔昕悦,香港大学经管学院

本文编辑:王玉洁

技术总编:戴   雯

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~

一、观察目标网站
首先我们进入东方财富显示经济数据的网站,网址(http://data.eastmoney.com/cjsj/cpi.html) ,打开如下图所示:

折线图下方的表格是我们想要爬取的最终数据,年份从2008年1月到2021年8月。
二、观察网页源代码
我们想要获取中国居民消费价格指数(CPI)的历史数据,首先要观察一下该网站的网页源代码。鼠标右键单击网页,点击查看网页源代码进入界面。我们采用“月份”作为关键词搜索源代码,发现搜索结果显示0/0,并没有我们想要的数据信息:

这意味着数据信息被隐藏了,这时我们采取如下方法进行查找:首先,在网页单击鼠标右键,点击“检查”功能,这时我们可以看到网页右侧出现的部分,如下图所示:

下面我们点击右侧“Elements"那一栏的“Network",然后单击F5进行刷新,就可以看到网页隐藏的各种信息了。
那么,在众多的信息中,我们应该如何找到我们想要的数据内容呢?
在这里,我们可以首先排除不看各种png,gif等格式的文件,并且我们可以观察发现,有一个文件名叫datatable,单击它可以看到,该文件的内容是这一页的表格数据:

在这里我们可以尝试寻找1-9页每个页面的代码网址的规律,但该文件下面的文件则显示了所有从2008到2021年的数据内容,如下图所示:

右键单击该文件可以复制链接,然后我们就得到了包含所有数据表格的源代码网址:

三、数据爬取
整理思路之后,我们就可以进行爬取了。首先我们clear all清空内存,用cap mkdir创建一个新的文件夹,然后把包含所有数据的网页源代码导入到Stata中。代码如下:
clear allcap mkdir "E:\stata\eastmoney"cd "E:\stata\eastmoney"copy "http://datainterface.eastmoney.com/EM_DataCenter/JS.aspx?cb=jQuery112308194640145696499_1631591893848&type=GJZB&sty=ZGZB&js=(%5B(x)%5D)&p=1&ps=200&mkt=19&_=1631591893849" temp.txt,replaceinfix strL v 1-100000 using temp.txt,clear
把导入的数据复制到word中观察,我们发现除了开头和结尾之外,其他数据是由逗号分隔的。同时,数据中有一些我们不想要的双引号:

我们通过如下代码对数据进行清理:

split v, p("," "]" "[") //以"," "["和"]"分隔变量drop v //去掉原始变量vdrop v1 //去掉开头的乱码变量drop v2134 //去掉结尾的乱码变量sxpose,clear //转置replace _var1=subinstr(_var1,`"""',"",.) //在_var1变量下,把所有的双引号替换成空白
此时得到的结果如下图所示:

通过观察发现,1-13行为一组,是一年的数据,应该在一行。因此我们通过如下代码生成新的变量进行整理,并且只保留我们需要的行:
rename _var1 v //为了方便写代码,把_var1重新命名为vgen v1=v[_n+1] //生成变量v1,其内容为v的n+1行gen v2=v[_n+2]gen v3=v[_n+3]gen v4=v[_n+4]gen v5=v[_n+5]gen v6=v[_n+6]gen v7=v[_n+7]gen v8=v[_n+8]gen v9=v[_n+9]gen v10=v[_n+10]gen v11=v[_n+11]gen v12=v[_n+12]keep if mod(_n, 13) == 1 //保留我们需要的行
此时我们观察到,导出的数据类型都是字符型的,我们需要把他们转换成数值型的变量:
destring,replacegen date=date(v,"YMD") //更改日期的形式format date %dCY-N-D //把日期形式标准化drop vrename v* (全国CPI 全国CPI同比增长 全国CPI环比增长 全国CPI累计 城市CPI 城市CPI同比增长 城市CPI环比增长 城市CPI累计 农村CPI 农村CPI同比增长 农村CPI环比增长 农村CPI累计) //重新命名变量save "cpi.dta",replace
最终结果如下图所示:

四、图表绘制
假如我们想要根据如上数据绘出全国/城市/农村的每月CPI变化对比折线图,我们可以通过如下步骤实现:
首先,打开cpi.dta文件,并把多余不需要绘制的数据删去:
use cpi.dta, clearkeep date 全国CPI 城市CPI 农村CPIsave "cpiline.dta",replace
然后我们通过如下命令绘制折线图:
use cpiline.dta,clearline 全国CPI 城市CPI 农村CPI date, /// *作折线图title("CPI IN CHINA") /// *设定标题xtitle("date") ytitle("CPI")  //设定横纵坐标名称
做出的图像如下:

除此之外,东方财富网站上还有其他不同的经济数据,大家也可以去尝试一下~
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




腾讯课堂课程二维码








            


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











往期推文推荐        Seminar|媒体关联董事对融资和外部治理的影响         神奇的组内交叉合并         PDF分章节转TXT并实现可视化——以胡景北知青日记1971至1978年为例

万物皆可开——shellout妙用

无处不在的系列配置项|从零开始的Pyecharts(三)

使用Python制作自动聊天机器人  

fillin一下,平衡回来~

order命令——快速改变变量顺序的利器 Ajax应用场景——以获取雪球网港股代码及公司名称为例

播放列表中的歌单排行 

在Stata中轻松运用program编写命令

Meta Analysis in Stata17      

芒果TV视频弹幕爬取之《我在他乡挺好的》

Stata中的判断神器——confirm命令

cngdf——名义GDP与实际GDP之间的摆渡船

最近《扫黑风暴》有点火爆!我从豆瓣评论中发现了这些……

随机森林-Random Forest 

复原之神--preserve&restore

合并,“纵”享新丝滑:frameappend & xframeappend
什么是全局配置项?|从零开始的Pyecharts(二)帮你拿下数据可视化|从零开始的Pyecharts 

Stata助力疫情打卡管理——是谁没有接龙呢?

这十年,《金融研究》的编委和读者偏爱哪些研究话题和文章?

【案例展示】Python与数据库交互

学好这一手,英语词典常在手 

玩转Stata中的数学函数

用spmap看中国空气质量

戳穿围城面具:安利&劝退一个专业

走进图文并茂的攻略世界 

玩转word文档“大变身”——wordconvert

数据读入|一文读懂用Stata读入不同类型的数据

简述递归

关于我们 


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

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



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

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