Stata爬取七普人口数据
本文作者:郭培军,河南大学经济学院
本文编辑:赵微微
技术总编:李婷婷
Stata&Python云端课程来啦!
好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程,Stata进阶课程和Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
首先,我们进入此次爬取的网站,红黑人口库(https://www.hongheiku.com/)
从页面中我们可以发现,网站上方已经给我们分好了省、市、区县的排名情况,我们进入各省排名的网页后,查看该网页源码:
发现我们需要的信息都保存在源码中,并且都在一行,这当然是我们愿意看到的情况,提取起来十分方便。接下来我又检查了市级和区县级的网页源码,情况基本上大同小异。
确定了没有什么复杂的问题后,我们话不多说,直接开干,代码如下:
**省级人口数据
clear all
cap mkdir E:\人口数据
cap mkdir E:\人口数据\省级数据
cd E:\人口数据\省级数据
copy "https://www.hongheiku.com/tag/%E5%90%84%E7%9C%81" temp.txt, replace
infix strL v 1-100000 using temp.txt, clear
keep if ustrregexm(v, `"</td> <td class="column-2"><a href=""')
split v, p(`"</td> <td class="column-2"><a href=""')
drop v v1 v2
sxpose,clear
rename _var1 v
split v, p(`"</center></a></td><td class="column-3"><center>"' `"</center></td><td class="column-4"><center>"')
drop v
gen 省份 = ustrregexs(1) if ustrregexm(v1, `".html" title="(.*?)"><center>"')
gen 常住人口 = ustrregexs(1) if ustrregexm(v2, `"(.*?)万"')
gen 六普人口 = ustrregexs(1) if ustrregexm(v3, `"(.*?)万</center></td>"')
drop v1-v3
save E:\人口数据\省级人口数据, replace
**市级人口数据
clear all
cap mkdir E:\人口数据
cap mkdir E:\人口数据\市级数据
cd E:\人口数据\市级数据
local i = 1
forvalues p = 1/4 {
copy "https://www.hongheiku.com/category/shijirenkou/page/`p'" temp.txt, replace
infix strL v 1-100000 using temp.txt, clear
keep if ustrregexm(v, `"<table id="tablepress-48" class="tablepress tablepress-id-48"')
split v, p(`"</center></td></tr><tr class="row-2 even">"')
drop v
sxpose,clear
rename _var1 v
gen 地区 = ustrregexs(1) if ustrregexm(v, `".html" title="(.*?)"><center>"')
gen 常住人口 = ustrregexs(1) if ustrregexm(v, `""column-3"><center>(.*?)万(人)?</center>"')
gen 六普人口 = ustrregexs(1) if ustrregexm(v, `"<td class="column-4"><center>(.*?)万(人)?"')
drop v
save `i'.dta, replace
local i = `i' + 1
}
clear
local files: dir "." file "*.dta"
foreach file in `files' {
append using `file'
}
compress
save E:\人口数据\市级人口数据.dta, replace
**区县人口数据
clear all
cap mkdir E:\人口数据
cap mkdir E:\人口数据\区县数据
cd E:\人口数据\区县数据
local i = 1
forvalues p = 1/29 {
copy "https://www.hongheiku.com/category/xianjirank/page/`p'" temp.txt, replace
infix strL v 1-100000 using temp.txt, clear
keep if ustrregexm(v, `"<table id="tablepress-48" class="tablepress tablepress-id-48"')
split v, p(`"</center></td></tr><tr class="row-2 even">"')
drop v
sxpose,clear
rename _var1 v
gen 地区 = ustrregexs(1) if ustrregexm(v, `".html" title="(.*?)"><center>"')
gen 常住人口 = ustrregexs(1) if ustrregexm(v, `"</a></td><td class="column-3"><center>(.*?)万"')
gen 六普人口 = ustrregexs(1) if ustrregexm(v, `"<td class="column-4"><center>(.*?)万(人)?"')
drop v
save `i'.dta, replace
local i = `i' + 1
}
clear
local files: dir "." file "*.dta"
foreach file in `files' {
append using `file'
}
compress
save E:\人口数据\区县人口数据.dta, replace
怎么样,是不是很简单呢?欢迎大家在评论区交流!
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
浅析Python的序列化与反序列化
爬虫俱乐部的精彩答疑--爬虫为何失败?
利用Stata批量制作学生证 【数据分析-入门】科学计算基本库—Numpy的简单使用 Stata绘图系列——玩转绘图通用选项之图例 【基础篇】数据类型介绍——list、tuple和range对象覆盖北交所的“cnstock”复工了!
高考热度大数据爬虫——谁才是院校顶流
跨框架数据操作
河南大学经济学院2022年Stata数据处理与爬虫技术开班仪式顺利召开爬虫俱乐部的精彩答疑——local function
爬虫俱乐部精彩答疑——Python中的三种文件读取方法爬虫俱乐部的精彩答疑--认真仔细方能写出好程序爬虫俱乐部Python精彩答疑——更换Jupyter Notebook浏览器及dropna()参数详解
爬虫俱乐部的精彩答疑--如何打开Excel中扩展名与文件源码不符的文件
解锁《梦华录》之东京繁华生活
爬虫俱乐部的精彩答疑——DOS命令
爬虫俱乐部的精彩答疑之换行问题
爬虫俱乐部的精彩答疑--路径设置乱码怎么破?
爬虫俱乐部的精彩答疑--putdocx的二三事
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可
以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。