Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者: 李岸瑶 (华南师范大学)
邮箱: 1347396814@qq.com
目录
网络爬虫就是自动抓取网页信息的代码,也可以简单理解成代替繁琐的复制粘贴操作的手段。如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物 (数据)。从技术层面来说就是通过程序模拟浏览器请求站点的行为,把站点返回的 HTML 代码爬到本地,进而提取自己需要的数据,存放起来使用,即请求网站并提取数据的自动化程序。
Stata 进行网页表格爬取分为 3 个步骤:
split
、转置 sxpose
、提取 (正则表达式或直接字符串提取) 等。
本文以爬取「地区宏观数据」中 “重庆市国内生产总值指数” 的数据为例,讲解如何使用 Stata 进行网页表格数据爬取。
我们在其中能找到这样一个链接,通过复制粘贴到浏览器,可以发现该链接下存放的是数据。具体链接形式如下:
在上述链接中,参数 p = 2 就是关键,将 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 页表格的信息进行下载。
第一步:合并所有 txt 文件。
type *.txt > all.txt
,表示将任意 txt 类型的文件全部合并成一个 all.txt,注意 type
和 *
之间有空格,写完保存;.txt
改为 .bat
;第二步:txt 文档中插入转行。观察到 all.txt 中的内容并无转行,为了方便 Stata 处理数据,需插入转行。对比文档内容与表格内容后,选择在 </td></tr><tr><td>
前插入转行。具体实现步骤如下:
^p<tr><td>
替换所有 </td></tr><tr><td>
;第三步:all.txt 文件读入 Stata
infix strL v 1-20000 using "all.txt", clear
format v %500s
利用 infix
读取数据,然后把变量 v 的显示格式变成 %500s (这样看起来更宽)。导入后的数据如下图所示:
第四步:解决乱码问题
若数据导入 Stata 后,无法正常显示,即出现乱码问题。在这里,我们可用下面一行命令解决乱码问题。若文字显示正常,则不需运行以下命令。
replace v = ustrfrom(v, "gb18030", 1)
第一步:分析网页代码
</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"
以下方法不用借助任何第三方工具,完全依靠 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
}
Note:产生如下推文列表的 Stata 命令为:
lianxh 爬虫 正则 文本, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh