好好学习
暑期Stata培训班招生啦!!!接力线上的网课培训,我们在今夏又开始新一轮的线下培训啦!8月4日至12日,爬虫俱乐部期待与您的相遇!培训具体内容详见推文《暑期Stata编程技术定制培训班》。
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部资深高级会员为您排忧解难!
热爱爬虫的我突然出现!
伙伴们,还记得在上篇推文中我们得到的json格式的txt文件吗?今天,我们就来处理这个文件。

在这里,小编首先附上我们得到上边这个txt文件所用到的程序:
clear
cap mkdir E:\中国教育在线\
cap mkdir E:\中国教育在线\全国热度\
cd E:\中国教育在线\全国热度\
!curl -o temp.txt ///
"https://data-gkcx.eol.cn/soudaxue/queryschool.html?messtype=jsonp&callback=jQuery18303716956138643659_1529965632796&province=&schooltype=&page=8&size=30&keyWord1=&schoolprop=&schoolflag=&schoolsort=&schoolid=&_=1529965633197" ///
-H "Accept-Encoding: gzip, deflate,sdch" ///
-H "Accept-Language:zh-CN,zh;q=0.8" ///
-H "User-Agent: Mozilla/5.0 (WindowsNT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112Safari/537.36" ///
-H "Accept: */*" ///
-H "Referer:https://gkcx.eol.cn/soudaxue/queryschool.html?keyWord1=&schoolflag=&1=1&page=8" ///
-H "Cookie: tool_ipuse=223.104.20.26;tool_ipprovince=21; tool_iparea=2" ///
-H "Connection: keep-alive" ///
-H "Cache-Control: max-age=0" ///
--compressed
接下来,我们分两步收集国内两千多所高校的信息!
一、得到部分高校的基本信息
首先,我们用fileread()函数把txt文件读入stata,并且利用正则表达式将所有的空白字符(包括空格、制表符、回车符、换行符等)删掉。
clear
set obs 1
gen v = fileread("temp.txt")
replace v = ustrregexra(v,"\s","")
这样我们就把整个txt文件里面的内容读入到一个单元格里,如下图:

我们将这一个观测值里面的内容复制到word中进行分析。

通过分析我们发现:在这里可以根据①和④对这一个单元格的内容进行拆分、转置,这样一来,每一条观测值就只包含一所高校的基本信息。同时,我们可以看到,标号②中shoufei和jianjie的内容比较杂乱,所以我们删掉每所高校中的这部分信息,标号③中oldname之后的内容没有意义,我们同样将其删掉。
split v , p(`"[{"'`"},{"')
drop v v1
sxpose,clear
replace _var1 = ustrregexra(_var1,`"(shoufei.+?")schoolcode"',"")
replace _var1 = ustrregexra(_var1,`"(oldname.+)"',"")
结果如下:

再根据逗号对_var1进行拆分:
split _var1,p(`","')
drop _var1
结果如下:

我们可以看到,在上图中每一个变量都是“变量名称+具体内容”的样式,接下来我们对每一个变量都进行如下操作:将变量名称提取出来放入局部宏里,替换_var*,并将观测值中的变量名称删除,只保留具体内容。
程序如下:
foreach c of varlist _all {
if ustrregexm(`c',`""(.+?)":"') local varname = ustrregexs(1)
cap rename `c' `varname'
cap replace `varname' = ustrregexs(1) if ustrregexm(`varname',`"":"(.+)""')
}
drop _var*
将我们希望看到的变量排在前边,再将数据按照全国热度排序,这时我们就得到了我们想要的数据。
order schoolid ranking
destring(ranking),replace
sort ranking
save temp.dta,replace
结果如下:

我们可以发现源代码中所含有的信息远远超过了网页本身所显示的信息!可见这次的爬虫收获颇丰啊,当然,stata经常会给我们这样的惊喜,只要我们和stata君互相熟识,就会发现它有无与伦比的魅力。
二、利用循环,把全部高校的基本信息生成excel表格

通过观察网站信息,我们发现这类表格总共有95页,用一个简单的循环即可,将网页链接中的page=8改为page=`j’。再对程序做适当更改,即可得出我们想要的excel表格。
程序如下:
clear
cap mkdir E:\中国教育在线\
cap mkdir E:\中国教育在线\全国热度\
cd E:\中国教育在线\全国热度\
forvalues j = 1(1)95{
!curl-o `j'.txt ///
"https://data-gkcx.eol.cn/soudaxue/queryschool.html?messtype=jsonp&callback=jQuery18303716956138643659_1529965632796&province=&schooltype=&page=`j'&size=30&keyWord1=&schoolprop=&schoolflag=&schoolsort=&schoolid=&_=1529965633197" ///
-H "Accept-Encoding: gzip, deflate, sdch" ///
-H "Accept-Language: zh-CN,zh;q=0.8" ///
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" ///
-H "Accept: */*" ///
-H "Referer:https://gkcx.eol.cn/soudaxue/queryschool.html?keyWord1=&schoolflag=&1=1&page=8" ///
-H "Cookie: tool_ipuse=223.104.20.26; tool_ipprovince=21; tool_iparea=2" ///
-H "Connection: keep-alive" ///
-H "Cache-Control: max-age=0" ///
--compressed
clear
set obs 1
gen v = fileread("`j'.txt")
replace v = ustrregexra(v,"\s","")
split v , p(`"[{"' `"},{"')
drop v v1
sxpose,clear
replace _var1 = ustrregexra(_var1,`"(shoufei.+?")schoolcode"',"")
replace _var1 = ustrregexra(_var1,`"(oldname.+)"',"")
split _var1,p(`","')
drop _var1
foreach c of varlist _all {
if ustrregexm(`c',`""(.+?)":"') local varname = ustrregexs(1)
cap rename `c' `varname'
cap replace `varname' = ustrregexs(1) if ustrregexm(`varname',`"":"(.+)""')
}
drop _var*
order schoolid ranking
save `j'.dta ,replace
}
clear
cap rm temp.dta
fs *.dta
return list
foreach n in `r(files)'{
append using `n'
rm `n'
}
destring(ranking),replace
sort ranking
compress
export excel using 中国教育在线.xlsx,replace first(variables)
shellout 中国教育在线.xlsx
结果如下:

不知道这样一个excel表合不合你的胃口,快来这里找找你心仪的高校吧!细心的小伙伴一定会发现,表格第一列出现了schoolid,它到底是一种怎样的存在?它对我们后续的爬虫又有什么作用呢?敬请关注下期推文——大结局。
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:王凯丽
技术总编:刘贝贝
往期精选
19 July 2018
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

