stata抓取html,Stata 网页表格爬取示例

本文以爬取东方财富网 CPI 数据[1]为例,讲解如何使用 Stata 进行网页表格数据爬取。

Stata 虽非数据爬取利器,但是能够轻松解决一些小的数据爬取任务。数据爬取的本质无非是数据请求和数据处理,因此熟练使用 Stata 进行数据爬取往往也是很好的数据处理能力的象征。在实际应用中,我们经常需要爬取一些公开数据。这些数据一种常见展示方式是通过 HTML 表示呈现。一个简单的 HTML 表格示例如下:

1 2 3
1 2 3

东方财富网 CPI 数据的表格是这样的:

182476247_1_2020021211475119

下面我将一步步讲解如何爬取这个表格。

准备工作Stata14.0 以上版本的;

Chrome 浏览器;

想把数据爬下来的你。

网页分析

首先讲解如何爬取一个页面的表格。这个网页的网址是:http://data.eastmoney.com/cjsj/cpi.html

182476247_2_20200212114751956

在页面上右键选择显示网页源代码,很多浏览器都有查看网页源代码的功能,但是我还是最喜欢谷歌浏览器的。点击之后即可跳转至网页源代码界面:

182476247_3_20200212114752800

也就是说你刚刚看到的网页的本质实际上是这些源代码,之所以我们能看到各种炫彩的页面,那是因为浏览器帮我们翻译了源代码。

下一步我们要做的事情就是找到这个表格在源代码的哪一块儿了,然后分析表格的特点,以方便在后面的 Stata 处理源代码的时候进行过滤。

一个经常被用来寻找目标的方法是使用查找功能。Ctr+F(Mac 是 Command + F)即可打开搜索框,我们注意到表格里面有月份两个字,所以我们就用月份进行查找。

182476247_4_20200212114753284

我们首先在第 1987 行发现了这个词,仔细一看,这附近的代码就是表格的代码。

下一步就是我们先分析一下这部分代码的特点:所有表格中的数据在源代码中都是单独位于一行的,所以我们不能从其所在行入手了;

表格数据的上一行要么有字符串

经过以上的网页分析我们就可以开始进行网页表格爬取了。

开始爬取

总的来说,Stata 进行网页表格爬取分为 3 个步骤:请求:把含有所需数据的源代码下载下来;

转码:很多网页并非使用 UTF-8 编码,直接读入 Stata 会出现乱码,因此可以预先进行 UTF-8 转码;

处理:这里主要是对字符串进行处理,常用操作有分割 (split)、转置 (sxpose)、提取 (正则表达式或直接字符串提取)等等。

请求

由于这个网页没有设置反爬机制,所以可以直接使用 copy 命令进行下载,copy 命令不仅可以下载网页,还可以下载文件(当然网页其实就是一个 html 文件)。更多用法可以 help copy。我们这里把要爬取的页面保存成一个名叫 temp.txt 的 txt 文件,为什么要起这个名字呢,因为爬完之后它就要被删除了,所以只是一个临时的文件。实际上 Stata 也可以创建临时文件,这样的文件会在运行结束的时候自动被删除,不过我觉得这是没有必要的,因为通常需要把 temp.txt 文件打开分析里面的内容。

clear all

* 设定工作目录

cd '你自己的工作目录(一个文件夹的路径)'

copy 'http://data.eastmoney.com/cjsj/cpi.html' temp.txt, replace

转码

在我的 Stata 命令包—— finance 包中,我编写了一个简单的转码命令,这个命令包的安装办法为:* 首先你需要安装 github 命令,这个命令是用来安装 GitHub 上的命令的

* net install github, from('https://haghish.github.io/github/')

* 然后就可以安装这个命令了

* github install czxa/finance, replace

安装成功之后,使用下面的命令就可以直接对 temp.txt 文件进行转码了:

utrans temp.txt

如果返回的结果是转码成功,则表示转码成功了!(感觉像在说废话。。。)

如果你不幸的因为各种各样的原因没能成功安装这个小命令,可以直接使用下面三句命令进行转码:unicode encoding set gb18030

unicode translate temp.txt

unicode erasebackups, badidea

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值