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

优采云 发布时间: 2022-04-30 12:22

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

  邮箱:

  目录

  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

  

  关于我们

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线