专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
广发银行  ·  【运动季】每天5000步,打卡赢运动手表! ·  2 天前  
成于微言  ·  四川又有原银监高官退休被查 ·  2 天前  
银行家杂志  ·  深交所宣布:调整→ ·  5 天前  
银行家杂志  ·  兰州银行韩佳峻 ... ·  3 天前  
51好读  ›  专栏  ›  爬虫俱乐部

再见,高考;你好,大学(尾篇)

爬虫俱乐部  · 公众号  ·  · 2018-07-26 12:11

正文

请到「今天看啥」查看全文


格式的 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 命令抓取双一流学科时,就会出现下文提到的两种情况。

抓取一所学校的双一流学科

1

当双一流学科页面存在时(以北京大学为例)

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,`"

(.+)







请到「今天看啥」查看全文