php 循环抓取网页内容 _variables介绍
优采云 发布时间: 2022-06-25 02:10php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和*敏*感*词*车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,*敏*感*词*车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=1" temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更*敏*感*词*,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具*敏*感*词*,*敏*感*词*类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的*敏*感*词*及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,*敏*感*词*,我们会在后期的推文里给予解答。