STATA爬虫:抓取期刊最新文章目录及作者

刚刚接触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官网的各期文章目录及作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值