Stata爬虫:爬取地区宏观数据
优采云 发布时间: 2022-04-30 12:22Stata爬虫:爬取地区宏观数据
邮箱:
目录
4. 补充方法
5. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. 基本原理
网络爬虫就是自动抓取网页信息的代码,也可以简单理解成代替繁琐的复制粘贴操作的手段。如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物 (数据)。从技术层面来说就是通过程序模拟浏览器请求站点的行为,把站点返回的 HTML 代码爬到本地,进而提取自己需要的数据,存放起来使用,即请求网站并提取数据的自动化程序。
2. 基本步骤
Stata 进行网页表格爬取分为 3 个步骤:
网页分析:获取项目的源代码;请求并读入:把含有所需数据的源代码下载下来,并导入 Stata;处理数据:主要是对字符串进行处理,常用操作有分割 split、转置 sxpose、提取 (正则表达式或直接字符串提取) 等。
3. 爬虫案例
本文以爬取「地区宏观数据」中 “重庆市国内生产总值指数” 的数据为例,讲解如何使用 Stata 进行网页表格数据爬取。
图 1:条件筛选3.1 网页分析
图 2:获取信息源
我们在其中能找到这样一个链接,通过复制粘贴到浏览器,可以发现该链接下存放的是数据。具体链接形式如下:
在上述链接中,参数 p = 2 就是关键,将 2 替换成其他页数,就能返回对应页的数据源代码。
3.2 请求数据
capt mkdir "./地区宏观数据"<br />cd "./地区宏观数据"<br /><br />forvalues i=1(1)4{<br /> *注意:引号中的文本不能换行,这里为了展示方便,对链接内容进行了换行,<br /> *读者在练习时,可删除换行符,将链接内容放到一行<br /> copy "http://calendar.hexun.com/area/dqzb_iframeInner.aspx? ///<br /> page=`i'&codeList=D0020000&citycode=500000&startdate=1949 ///<br /> &endDate=2020" "temp`i'.txt", replace<br />}<br />
由于这个网页没有设置反爬机制,所以可以直接使用 copy 命令进行下载。在这里,我们运用循环语句 forvalue 对前 4 页表格的信息进行下载。
3.3 读入数据
第一步:合并所有 txt 文件。
第二步:txt 文档中插入转行。观察到 all.txt 中的内容并无转行,为了方便 Stata 处理数据,需插入转行。对比文档内容与表格内容后,选择在
前插入转行。具体实现步骤如下:
图 3:观察何处插入转行
第三步:all.txt 文件读入 Stata
infix strL v 1-20000 using "all.txt", clear<br />format v %500s<br />
利用 infix 读取数据,然后把变量 v 的显示格式变成 %500s (这样看起来更宽)。导入后的数据如下图所示:
图 4:数据的雏形
第四步:解决乱码问题
若数据导入 Stata 后,无法正常显示,即出现乱码问题。在这里,我们可用下面一行命令解决乱码问题。若文字显示正常,则不需运行以下命令。
replace v = ustrfrom(v, "gb18030", 1)<br />
3.4 处理数据
第一步:分析网页代码
*数据保留<br />keep if index(v,`""')<br />split v,p(`""' )<br />split v2 ,p(`""' )<br />split v25 ,p(`""' )<br />keep v21 v22 v23 v24 v251<br />
*变量重命名<br />rename v21 国内生产总值指数<br />rename v22 第一产业生产总值指数<br />rename v23 第二产业生产总值指数<br />rename v24 第三产业生产总值指数<br />rename v251 人均国内生产总值指数<br />
*输出文件<br />export excel using "地区宏观数据.xlsx", firstrow(var) replace<br />shellout using "地区宏观数据.xlsx"<br />
图 5:结果展示
4. 补充方法
以下方法不用借助任何第三方工具,完全依靠 Stata 完成,具体代码如下:
capt mkdir "./地区宏观数据"<br />cd "./地区宏观数据"<br /><br />forvalues i=1(1)4{<br /> *注意:引号中的文本不能换行,这里为了展示方便,对链接内容进行了换行,<br /> *读者在练习时,可删除换行符,将链接内容放到一行<br /> copy "http://calendar.hexun.com/area/dqzb_iframeInner.aspx? ///<br /> page=`i'&codeList=D0020000&citycode=500000&startdate=1949 ///<br /> &endDate=2020" "temp`i'.txt", replace<br />}<br /><br />forvalues i = 1(1)4{<br /> infix strL v 1-20000 using "temp`i'.txt", clear<br /> format v %500s<br /> replace v = ustrfrom(v, "gb18030", 1)<br /> keep if index(v,`""')<br /> split v, p(`""' )<br /><br /> forvalues j = 1(1)20{ //20为新产生变量数<br /> insobs 20<br /> replace v = v`j'[1] in `j'<br /> }<br /><br /> keep v<br /> split v, p(`""' )<br /> split v2, p(`""' )<br /> split v25, p(`""' )<br /> keep v21 v22 v23 v24 v251<br /><br /> rename v21 国内生产总值指数<br /> rename v22 第一产业生产总值指数<br /> rename v23 第二产业生产总值指数<br /> rename v24 第三产业生产总值指数<br /> rename v251 人均国内生产总值指数<br /><br /> save "temp`i'.dta", replace<br />}<br /><br />use temp1.dta, clear<br />forvalues i = 2(1)4{<br /> append using temp`i'<br />}<br />drop if 国内生产总值指数 == ""<br />save 地区宏观数据.dta, replace <br /><br />forvalues i = 1(1)4{<br /> erase temp`i'.dta<br />}<br />
5. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 爬虫 正则 文本, m
安装最新版 lianxh 命令:
ssc install lianxh, replace
专题:Python-R-Matlab
课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
课程主页:
New! Stata 搜索神器:lianxh 和 songbl
搜: 推文、数据分享、期刊论文、重现代码 ……
安装:
. ssc install lianxh
. ssc install songbl
使用:
. lianxh DID 倍分法
. songbl all
关于我们