正文
格式的
txt
文件。最终我们有了一个包含丰富信息的
excel
表格(下图仅显示表格的一部分):
其实笔者最开始的用意并不是抓取前边的热度排行,而是要抓取
schoolid
(见下图)。并且要利用
schoolid
,进一步抓取那些年火遍大江南北的
“双一流学科”
!这才是我们此次爬虫的最终目的!
小伙伴们一定会发现,每一所高校都对应了一个特定的
schoolid
,它与高校的双一流学科之间有什么联系呢?让我们一起来研究一下:
我们在中国教育在线(http://www.eol.cn/)网站中找到北京大学双一流学科所在的页面(https://gkcx.eol.cn/schoolhtm/schoolInfo/31/10156/detail.htm):
接下来我们再找到厦门大学双一流学科所在的页面(https://gkcx.eol.cn/schoolhtm/schoolInfo/102/10156/detail.htm):
我们对比一下北京大学和厦门大学双一流学科所在的网址,发现只有两个数字不一样,并且这两个数字就是我们前边抓取的
schoolid
,经过进一步分析,我们发现高校的
schoolid
并不是连续的,为了准确的得到所有信息,我们选择了二次抓取,即把前两篇推文中我们拿到
schoolid
,作为本篇推文抓取双一流学科的依据。
但此时我们会有一个疑问,如果一个大学没有双一流学科又会是什么结果呢?我们以黄淮学院为例:
黄淮学院的
schoolid
是
884
,我们把
url
中的
schoolid
换成
884
:(https://gkcx.eol.cn/schoolhtm/schoolInfo/884/10156/detail.htm)网站则会自动跳转到如下页面:
所以,当某一所高校
不存在双一流学科
时,就会出现一个没有任何信息的页面。假如我们使用
copy
命令抓取没有双一流学科的网页时,Stata将会报错,并有一个返回值
601
(详见下边分析)。也就是,我们根据
schoolid
使用
copy
命令抓取双一流学科时,就会出现下文提到的两种情况。
clear
cap mkdir e:/双一流/
cd e:/双一流/
cap copy "https://gkcx.eol.cn/schoolhtm/schoolInfo/31/10156/detail.htm" 31.txt,replace
di _rc
shellout 31.txt
我们发现,当双一流学科这个页面存在时,返回值
_rc
为
0
。在我们得到的
txt
文件中,包含两处对我们有用的信息:(大学名称和双一流学科)
我们使用
fileread()
函数将
txt
文件读入stata,并用
正则表达式
提取上述两处信息:
clear
set obs 1
gen v = fileread("31.txt")
gen v1 = ustrregexs(1) if ustrregexm(v,`"(.+)"')
gen v2 = ustrregexs(1) if ustrregexm(v,`"(.+)