刚刚接触stata爬数据,记录人生中第一篇CSDN作为学习笔记,命令特别笨拙和小白,欢迎大家批评指正。
以下命令基于MAC系统,以中国社会科学为例
-------------------------网页介绍-------------------------
打开官方网页,确定需要捕捉的内容:【文章标题】、【作者】
点开随意一篇文章,能够看到其URL规律:主网页+各文章的对应链接
-------------------------命令介绍-------------------------
下面正式进入STATA命令。
一、获取最新一期中的全部文章的链接
1、将期刊最新一期的第一页目录信息全部抓取并保存至名称为“sublink”的txt文件。
*-----------------------*/
/* 爬虫 */
/* 期刊目录 */
/*-----------------------*/
clear
eststo clear
graph drop _all
cap log close
set more off
cap mkdir "/Users/Desktop/Database/STATA/SSIC" //在指定文件中新建“SSIC”文件夹
cd "/Users/Desktop/Database/STATA/SSIC" //设置路径
global root = "/Users/Desktop/Database/STATA/SSIC"
*-爬取网页文本代码
*******此句是关键,输入最新issues的日期如"202211"********
***!!!!!!记得换日期!!!!****
copy "http://sscp.cssn.cn/zgshkx/zgshkx202211/" "$root/sublink.txt",replace
//从官网直接抓取最新一期的页面全部信息至txt文件
******************************************************
2、仅保留爬取数据中我需要的部分,也即每篇文章链接。通过关键词锁定后,使用“subinfile”命令对文本冗余信息进行筛选。",index(aaa)"选项表示仅保留包含“aaa”的行,并通过“split”命令对文本分行。
subinfile sublink.txt, index(`"<a href="./"') ///
from(`"(<a href=".)|(</a>)"') fromregex replace
infix strL v 1-20000 using sublink.txt, clear
split v,parse(`"" target="_blank">"')
drop v v2
drop in 1 //第一行捕捉错误信息
rename v1 sublink
但是可以看到,与AER所有文章均出现在一页不同,该期刊官网目录被分成了两页,而且第二页的url并不是规律的,基于我的知识无法解决翻页问题,因此用了一个比较笨的方法:
3、按照上面对步骤,重复捕捉第二页的文章链接,然后再将第二个文件数据加入第一个文件。
*******未能解决翻页问题,因此只能手动将第二页内容再次捕捉********
***!!!!!!记得换日期!!!!****
copy "http://sscp.cssn.cn/zgshkx/zgshkx202211/index_1.html" "$root/sublink2.txt",append
******************************************************
subinfile sublink2.txt, index(`"<a href="./"') ///
from(`"(<a href=".)|(</a>)"') fromregex replace
infix strL v 1-20000 using sublink2.txt, clear
split v,parse(`"" target="_blank">"')
drop v v2
drop in 1 //第一行捕捉错误信息
rename v1 sublink
******************************************************
shell cat "$root/sublink2.txt">>"$root/sublink.txt"
这样的缺点是需要手动修改两次网页中的日期,增加了一些工作量,因此希望有更加专业的小伙伴提出修改建议。
4、根据每篇文章链接,使用循环语句捕捉文章名和作者名,然后生成名叫“SSIC”的dta文件。
levelsof sublink, local(levels)
local i = 1
local j = 1
foreach c of local levels {
copy "http://sscp.cssn.cn/zgshkx/zgshkx202211`c'" "$root/paper.txt",replace
infix strL v 1-200000 using paper.txt, clear
keep if ustrregexm(v,`"(<div class="history_center-titlewz2">)|(作者:)"')
replace v = ustrregexra(v, "<.*?>" , "")
replace v = ustrregexra(v, "\s{2,}" , ";")
replace v = ustrregexra(v, ";$", "")
sxpose ,clear
split _var2,parse(`"作者:"')
drop _var2 _var21
rename (_var1 _var22 ) (title author)
drop if author == ""
save "`i'_`j'.dta",replace
local j =`j'+1
}
openall
save SSIC.dta, replace
引用:
本文命令是在爬虫“黑科技”:一网打尽AER框架下进行的重新编写,这是一个非常棒的教程,里面详细介绍了如何抓取AER官网的各期文章目录及作者。