喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
有过爬虫经验的码农们都希望抓取信息的速度越快越好,在之前的推文中,我们介绍了rmsg这个命令《rmsg-爬虫到底要花多少时间》,它可以告诉你抓取海量数据到底需要多少时间,在知道爬虫所需具体时间之后,我们的下一步当然是优化我们的程序,进一步缩短爬时间。在这里呢,小编就给大家介绍一个炒鸡好用炒鸡简单的命令---“quietly”。
简单来说,quietly表示悄悄地运行程序,即不在Stata窗口显示运行的结果。那么在什么情况下,我们可以使用到这个命令呢?接下来,让小编来举几个例子吧。
1.只显示关键信息
假设我们运行了多个回归结果,想要从中挑出拟合优度()最高的那个方程,一般来说我们都是这样做的:
sysuse auto,clear
reg price weight mpg
reg price weight mpg gear_ratio
reg price weight mpg gear_ratio foreign
输出如图:
在stata结果窗口中,我们可以看到输出了很多我们当前并不需要的信息,使得我们不能马上就观察到拟合优度的值并进行比较。那么在这个情况,我们就可以使用quietly命令啦。对于以下这种单行的命令,我们可以直接将quietly加在程序的开头,每次运行完回归结果之后,拟合优度()会被保存到了e(r2)这个宏中。
sysuse auto,clear
quietly reg price weight mpg
dis `e(r2)'
quietly reg price weight mpg gear_ratio
dis `e(r2)'
quietly reg price weight mpg gear_ratio foreign
dis `e(r2)'
输出结果如图:
是不是很快就发现第三个方程的拟合优度是最高了的呢。
2.缩短运行时间
既然quietly可以让程序默默进行而不显示输出结果,这在一定程度上可以缩短了运行的时间,而这若运用到海量数据爬取中,则能大大缩短程序运行时间。
还记得当初我们用rmsg计算抓取港股数据股票代码为00001的历年交易数据总时间为多少吗?
那么我们在源程序上做一些修改,让爬虫悄悄进行,只显示当前抓取的年份和时间,程序如下,值得注意的是,对于多行程序,只需将其放在quietly{ }的花括号中:
set rmsg on
clear
cap mkdir e:/港股数据/
cd e:/港股数据/
forvalue year = 2000(1)2016 {
forvalue season = 1(1)4 {
quietly{
!curl --data 'year=`year'&season=`season'' -o `year'_`season'.txt http://stock.finance.sina.com.cn/hkstock/history/00001.html
clear
set obs 1
gen v=fileread('`year'_`season'.txt')
split v,parse('''')
keep v3
rename v3 v
replace v= ustrregexra(v,'\s+','')
split v,parse('')
drop v v1
sxpose,clear
rename _var1 v
replace v= ustrregexra(v,'\s+|^| $','')
split v,p('
drop v
rename (v1-v10)(日期 收盘价 涨跌额 涨跌幅 成交量 成交额 开盘价 最高价 最低价 振幅)
drop in -1
save `year'_`season',replace
erase `year'_`season'.txt
}
dis '`year'_`season''
}
}
openall
save 00001.dta,replace
我们可以在输出窗口中看到:
输出窗口不再像原来那样一直处于快速滚动状态,使我们不清楚到底当前已经抓到哪一部分了,修改完之后,窗口的输出变得简单明了。并且最后的运行时间从3分钟缩短到1分钟。哇,只添加了一个quietly命令,就把时间缩短为原来的1/3,这也太棒了吧。
联系客服