Stata爬虫:爬取地区宏观数据

发布时间:2021-07-18 阅读 4706

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者: 李岸瑶 (华南师范大学)
邮箱: 1347396814@qq.com


目录


1. 基本原理

网络爬虫就是自动抓取网页信息的代码,也可以简单理解成代替繁琐的复制粘贴操作的手段。如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物 (数据)。从技术层面来说就是通过程序模拟浏览器请求站点的行为,把站点返回的 HTML 代码爬到本地,进而提取自己需要的数据,存放起来使用,即请求网站并提取数据的自动化程序。

2. 基本步骤

Stata 进行网页表格爬取分为 3 个步骤:

  1. 网页分析:获取项目的源代码;
  2. 请求并读入:把含有所需数据的源代码下载下来,并导入 Stata;
  3. 处理数据:主要是对字符串进行处理,常用操作有分割 split、转置 sxpose、提取 (正则表达式或直接字符串提取) 等。

3. 爬虫案例

本文以爬取「地区宏观数据」中 “重庆市国内生产总值指数” 的数据为例,讲解如何使用 Stata 进行网页表格数据爬取。

图 1:条件筛选
图 1:条件筛选

3.1 网页分析

  • 使用浏览器为 Win10 自带 Microsoft Edge 打开网址;
  • 点击鼠标右键,“审查元素 (检查)”;
  • 找到 “网络” 选项,点击一下;
  • 点击国内生产总值指数表的第二页;
  • 可以看到有很多内容从网站服务器上 load 出来,那是加载第二页的网页信息源。
图 2:获取信息源
图 2:获取信息源

我们在其中能找到这样一个链接,通过复制粘贴到浏览器,可以发现该链接下存放的是数据。具体链接形式如下:

  • http://calendar.hexun.com/area/dqzb_iframeInner.aspx?page=2&codeList=D0020000&citycode=500000&startdate=1949&endDate=2020

在上述链接中,参数 p = 2 就是关键,将 2 替换成其他页数,就能返回对应页的数据源代码。

3.2 请求数据

capt mkdir "./地区宏观数据"
cd  "./地区宏观数据"

forvalues i=1(1)4{
    *注意:引号中的文本不能换行,这里为了展示方便,对链接内容进行了换行,
    *读者在练习时,可删除换行符,将链接内容放到一行
    copy "http://calendar.hexun.com/area/dqzb_iframeInner.aspx? ///
    page=`i'&codeList=D0020000&citycode=500000&startdate=1949   ///
    &endDate=2020" "temp`i'.txt", replace
}

由于这个网页没有设置反爬机制,所以可以直接使用 copy 命令进行下载。在这里,我们运用循环语句 forvalue 对前 4 页表格的信息进行下载。

3.3 读入数据

第一步:合并所有 txt 文件。

  • 在 “地区宏观数据” 文件夹中新建一个 txt 文本文档;
  • 输入 type *.txt > all.txt,表示将任意 txt 类型的文件全部合并成一个 all.txt,注意 type* 之间有空格,写完保存;
  • 然后将该 txt 文档的格式后缀 .txt 改为 .bat
  • 双击运行,所有数据将储存于 all.txt。

第二步:txt 文档中插入转行。观察到 all.txt 中的内容并无转行,为了方便 Stata 处理数据,需插入转行。对比文档内容与表格内容后,选择在 </td></tr><tr><td> 前插入转行。具体实现步骤如下:

  • 将文档内容剪切到 Word 中;
  • ^p<tr><td> 替换所有 </td></tr><tr><td>
  • 随后复制到 all.txt 文档中。
图 3:观察何处插入转行
图 3:观察何处插入转行

第三步:all.txt 文件读入 Stata

infix strL v 1-20000 using "all.txt", clear
format v %500s

利用 infix 读取数据,然后把变量 v 的显示格式变成 %500s (这样看起来更宽)。导入后的数据如下图所示:

图 4:数据的雏形
图 4:数据的雏形

第四步:解决乱码问题

若数据导入 Stata 后,无法正常显示,即出现乱码问题。在这里,我们可用下面一行命令解决乱码问题。若文字显示正常,则不需运行以下命令。

replace v = ustrfrom(v, "gb18030", 1)

3.4 处理数据

第一步:分析网页代码

  • 表格中每一行的数据在源代码中都是单独位于一行的,且每一行的数据都含有特殊字符 </td><td>,故先用 keep 保留含有上述字符的行数据;
  • 随后可以直接对数据用 split 进行切割,只留下数字内容,最后用 keep 进行保留。
*数据保留
keep if index(v,`"</td><td>"')
split v,p(`"<tr><td>"' )
split v2 ,p(`"</td><td>"' )
split v25 ,p(`"</td></tr>"' )
keep v21 v22 v23 v24 v251
*变量重命名
rename v21 国内生产总值指数
rename v22 第一产业生产总值指数
rename v23 第二产业生产总值指数
rename v24 第三产业生产总值指数
rename v251 人均国内生产总值指数
*输出文件
export excel using "地区宏观数据.xlsx", firstrow(var) replace
shellout using "地区宏观数据.xlsx"
图 5:结果展示
图 5:结果展示

4. 补充方法

以下方法不用借助任何第三方工具,完全依靠 Stata 完成,具体代码如下:

capt mkdir "./地区宏观数据"
cd  "./地区宏观数据"

forvalues i=1(1)4{
    *注意:引号中的文本不能换行,这里为了展示方便,对链接内容进行了换行,
    *读者在练习时,可删除换行符,将链接内容放到一行
    copy "http://calendar.hexun.com/area/dqzb_iframeInner.aspx? ///
    page=`i'&codeList=D0020000&citycode=500000&startdate=1949   ///
    &endDate=2020" "temp`i'.txt", replace
}

forvalues i = 1(1)4{
	infix strL v 1-20000 using "temp`i'.txt", clear
	format v %500s
	replace v = ustrfrom(v, "gb18030", 1)
	keep if index(v,`"</td><td>"')
	split v, p(`"</td></tr>"' )

	forvalues j = 1(1)20{ //20为新产生变量数
		insobs 20
		replace v = v`j'[1] in `j'
	}

	keep v
	split v, p(`"<tr><td>"' )
	split v2, p(`"</td><td>"' )
	split v25, p(`"</td></tr>"' )
	keep v21 v22 v23 v24 v251

	rename v21 国内生产总值指数
	rename v22 第一产业生产总值指数
	rename v23 第二产业生产总值指数
	rename v24 第三产业生产总值指数
	rename v251 人均国内生产总值指数

	save "temp`i'.dta", replace
}

use temp1.dta, clear
forvalues i = 2(1)4{
	append using temp`i'
}
drop if 国内生产总值指数 == ""
save 地区宏观数据.dta, replace 

forvalues i = 1(1)4{
	erase temp`i'.dta
}

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 爬虫 正则 文本, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh