分享

点亮周围,城市夜间灯光数据的抓取

 张春强2022 2018-04-16

网课来啦!!!

开课通知

关于循环我们有两次正式的课程,循环后的post命令介绍是循环的进一步应用。我们将一些本来手工劳动的事情分解成简单的重复劳动,让计算机帮我们去跑,所以说循环是任何计算机语言的基础。Stata的循环虽然简洁但功能强大,其可以对数字进行循环、对变量、文件、local等任何东西循环,Stata因循环而完美

今天的课程包括如下几个重点:

(1)如何对多个变量进行循环(把变量名放在一个local里面);

(2)如何对一个变量的多个取值进行循环(把变量的取值列表放在一个local里面);

(3)如何对多个文件进行循环(获得文件名并放入local);

(4)如何跳转到循环开始的位置:一个循环可以看作是一对花括号“{}”,有时候我们需要跳转到循环开始的位置,比如我们要计算一群公司的beta,但是规定必须有20周以上的交易才能计算beta,此时假定在循环中遇到某公司的交易周数只有10个,当前一轮的循环不应该执行下去,但是我们应该跳转到循环开始的位置,前一个花括号的前面,进行下一家公司的计算。再比如我们要抓取某一家公司的公告页面,公告页面的url里面有page=1或page=2代表第一页或第二页,但是我们不知道究竟有多少页,只能每次判断,假定到page=37页的时候发现到头了,就需要从循环中跳转出来,即跳转到循环结尾,后一个花括号的后面。

(5)对日期进行循环

(6)对Excel文件的多个sheet进行循环(重点是你怎么得到sheet名的列表。。。)。


有问题看过来:)


有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~


喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.,粉丝们可以通过该网站访问过去的推文哟~


好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

福利在这里

错过报名的小伙伴不要心慌,不要着急哦,我们的直播课程是有回放滴,欢迎继续报名呀!报名链接

https://ke.qq.com/course/286526#tuin=9735fd2d

接下来是今天的推文!!!

抓取地址:www.udparty.com

抓取对象:1992-2013年22年的夜间灯光数据

一、为什么要抓取这个数据

夜间灯光影像作为一种较为特殊的能够有效监测夜间灯光的遥感影像,逐渐被学者深入研究,夜间灯光数据逐渐被应用于各行各业。如今夜间灯光数据主要被应用于城市化水平研究人口研究灾害研究以及社会发展研究等方面。

二、数据来源

夜间灯光影像美国DMSP卫星上的OLS传感器所获取的,下载来源于https://ngdc./eog/dmsp/downloadV4composites.html,主要产品为平均可见光稳定光源云自由覆盖与平均光线x Pct数据。网站提供了1992年-2013年共22年间数据,自带坐标为WGS1984坐标系,此外,随着卫星传感器的更替,出现了一年有两个传感器测得的不同数据的情况。

三、抓取数据

查看数据网站的URL:

https://ngdc./eog/dmsp/downloadV4composites.html

通过分析,我们发现每一个蓝色的链接都是当年对应的灯光数据,我们接下来将所有的灯光数据链接抓取下来。

查看网页的源代码:

可以看到关于平均可见光、稳定光源和云自由覆盖夜间灯光数据的源代码都是以.tar结尾的:

而关于平均光线x Pct的数据则是以.tgz结尾的:

对于这样有规律可循的源代码用moss命令就可以轻松处理,对于moss命令还不熟悉的小伙伴可以重新复习一下往期推文《moss命令、正则表达式与简单的文本分析》

首先将网页的源代码抓取下来:

clear

cap mkdir'E:\程序'

cd 'E:\程序'

copy 'https://ngdc./eog/dmsp/downloadV4composites.html#AVSLCFC''lights.txt',replace

shellout lights.txt

这里可以看到我们已经将源代码的内容全部放在了lights.txt的文本文档中。

接下来,用fileread()函数导入源代码,并进行字符串处理:

set obs 1

gen v = fileread('lights.txt')

replace v = ustrregexra(v,'\s+','')

moss v,match('(/eog/data/web_data/v4composites/.*?.tar)')regex unicode prefix(a)

moss v,match('(/eog/data/web_data/v4avg_lights_x_pct/.*?.tgz)')regex unicode prefix(b)

keep am* bm*

sxpose,clear

rename _var1 v

replace v = 'https://ngdc.'+v

save lights.dta,replace

结果的一部分如下图所示:

这样我们就把网站上的1992-2013年间的所有夜间灯光数据的下载链接全部爬取下来了。那么接着需要一个一个点开下载吗?麻烦且容易漏选,我们拒绝收工!—使用循环让stata自行下载我们抓取到的链接中的内容,并用链接中最后一个/后边的字符串命名:

use lights.dta,clear

levelsof v,local(url)

foreach url in `url'{

       dis '`url''

       if ustrregexm('`url'','/F(.+?)$') local name = ustrregexs(1)

       dis '`name''

       copy '`url'' '`name'',replace

}

通过执行以上程序,我们就可以将原网页中1992-2013年之间22年的夜间城市灯光数据抓取下来。

完整程序如下:

clear

cap mkdir'E:\程序'

cd 'E:\程序'

copy 'https://ngdc./eog/dmsp/downloadV4composites.html#AVSLCFC''lights.txt',replace

shellout lights.txt

set obs 1

gen v = fileread('lights.txt')

replace v = ustrregexra(v,'\s+','')

moss v,match('(/eog/data/web_data/v4composites/.*?.tar)')regex unicode prefix(a)

moss v,match('(/eog/data/web_data/v4avg_lights_x_pct/.*?.tgz)')regexunicode prefix(b)

keep am* bm*

sxpose,clear

rename _var1 v

replace v = 'https://ngdc.'+v

save lights.dta,replace

use lights.dta,clear

levelsof v,local(url)

foreach url in `url'{

       dis '`url''

       if ustrregexm('`url'','/F(.+?)$') local name = ustrregexs(1)

       dis '`name''

       copy '`url'' '`name'',replace

}

这样,我们在电脑E:\程序,目录下得到了想要的数据:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多