哈 喽,诸君安。在我们学习stata的过程中会接触很多命令,我们通过ssc install下载各种命令到自己的stata中,那么大家知道ssc上面到底有多少命令吗?它们又是什么呢?之前的推文中已经多次介绍到用 subinfile命令替换、保留、删除数据,今天我们用subinfile命令来爬取上传到ssc中的所有命令。
一、找到网络数据源
在这个网站中(https://ideas.repec.org/s/boc/bocode.html)列出了上传到ssc中的所有命令,如下图所示:
可以看到,ssc中的命令包含在15个网页中,对应上图0-14。相应网页为:https://ideas.repec.org/s/boc/bocode.html;
https://ideas.repec.org/s/boc/bocode1.html;
https://ideas.repec.org/s/boc/bocode2.html
......
https://ideas.repec.org/s/boc/bocode.html14
我们首先介绍如何爬取一个网页中的命令,再通过循环爬取15个网页的命令。
查看网页源代码如下:
可以看到在网页源代码的第225行有我们需要获取的内容。
二、copy网页源代码
首先我们用copy命令将网页的内容copy到计算机硬盘:
clear
set more off
cap mkdir "d:\命令"
cd "d:\命令"
copy "https://ideas.repec.org/s/boc/bocode.html" "temp.txt", replace
这样网页源代码就保存在了d:\命令\temp.txt中。
三、爬取可行性分析
通过查看网页源代码,找寻爬取信息以及定位字符。我们可以找到网页源代码中有我们需要获取的内容。如下图所示:
因为从225行开始,才是我们需要的内容,因此我们只需保留该部分即可。subinfile可以帮我们保留文本文档中含有某个字符串的行。通过分析(如上图所示),我们把定位内容用黄色阴影high light起来,对应“<LI class="list”。绿色阴影是我们所需要获取的内容,如:JC: Stata module to dynamically load and call Java plugins。
四、用subinfile处理文本文档
经过上述爬取可行性分析,我们知道定位内容为“<LI class="”。接下来,就用subinfile这支利器来保留我们所需要的信息源代码,程序如下:
subinfile temp.txt, index(`"<LI') replace
执行结果如下:
通过上述操作,我们保留了所需要信息的所在行,但是我们知道只有绿色阴影部分才是我们需要获取的内容,而其他的字符串都需要被删除掉。来吧,继续使用subinfile:
subinfile temp.txt,from(`"(<.+html">)|(<.+)"') fromregex replace
这里我们用了正则表达式,其中,(<.+html">)表示上图黄色阴影部分,(<.+)表示紫色阴影部分。好了,我们就这样用subinfile轻轻松松删除了多余的字符串。
执行结果如下:
当然,我们也可以把以上两个命令写在一起,变成:
subinfile temp.txt, index(`"<LI') from(`"(<.+html">)|(<.+)"') fromregex replace
你们看,用subinfile这支利器,只需一行命令!一行命令!!一行命令!!!就帮助我们从密密麻麻的网页源代码中提取到我们所需要的信息。(关于subinfile的详细用法,请移步往期推文用subinfile修改文件,滚蛋吧,繁琐的命令君!【ps:我们前一段时间更新了subinfile命令,修正了一点小bug,欢迎大家更新:ssc install subinfile ,replace】)
五、加入循环语句爬取所有网页中的命令
程序如下:
forvalues i = 0/14 {
if `i' == 0 {
copy "https://ideas.repec.org/s/boc/bocode.html" "temp.txt", replace
}
else {
copy "https://ideas.repec.org/s/boc/bocode`i'.html" "temp.txt", replace
}
subinfile temp.txt, index(`"<LI') from(`"(<.+html">)|(<.+)"') fromregex replace
insheet using temp.txt,non clear
save `i'.dta, replace
}
执行结果如下:
接下来,再通过openall命令纵向合并上图15个文件。(对于命令详细地使用请移步推文送你一只粘合剂——用openall命令合并数据)
程序如下:
openall
好了,到这里我们就得到了stata中所有的命令:
哟西哟西,ssc中的所有命令尽在你手,有没有很爽啊?
另附爬取stata命令完整程序
clear
set more off
cap mkdir "d:\命令"
cd "d:\命令"
forvalues i = 0/14 {
if `i' == 0 {
copy "https://ideas.repec.org/s/boc/bocode.html" "temp.txt", replace
}
else {
copy "https://ideas.repec.org/s/boc/bocode`i'.html" "temp.txt", replace
}
subinfile temp.txt, index(`"<LI') from(`"(<.+html">)|(<.+)"') fromregex replace
insheet using temp.txt,non clear
save `i'.dta, replace
}
openall
stata培训哪家强?的搜寻结果
1个回答-
提问时间:2017年1月9日
[最佳回答] 亲爱的stata爱好者,您好。
爬虫俱乐部是一个专注解决stata各种疑难杂症的公众号,深受大家喜爱。该公众号即将举办线下stata培训,技术大牛亲手教你stata,赶紧戳开独家Stata技术培训,千呼万唤始出来报名吧!
EmmaWatson 9999……999条好评
接下来报告空气质量
全国空气质量如下
同情新疆人民!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~,点赞打赏随您心意,么么哒~
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
编辑 by司海涛
往期推文推荐:
7.一言不合就用stata写邮件(Outlook/Foxmail)
9.I have a Stata, I have a python
10.I have a Stata, I have a Python之二——pdf转word
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部
微信扫一扫
关注该公众号