国家统计局统计用区划代码和城乡划分代码---爬虫、详细分析

全部代码以及分析见GitHub:https://github.com/dta0502/NBSPRC-spider

详细分析见我的个人博客:国家统计局的统计用区划代码和城乡划分代码爬虫-(二)总体实现


页面分析

这里我分析一下页面,为后面的页面解析做准备。我就拿2016年的页面做下分析:2016年统计用区划代码和城乡划分代码(截止2016年07月31日)

省级页面分析

省级信息提取

我们进入到2016年统计用区划代码和城乡划分代码(截止2016年07月31日)这个页面,然后用chrome的“检查”工具看下我们要找的信息在哪。
这里我们需要爬取省级名称、省内市级信息的子链接这两个参数。
我们从图中可以发现,左边页面每一行对应的XPath路径为:

//tr[@class="provincetr"]

然后一行中每个省的信息在下一级的td标签内:

td/a/text()
td/a/@href

省级页面分析.png

下级链接获取

省级页面的URL:

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/index.html

下级页面的URL(我这里以浙江省为例):

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/33.html

页面中提取到的信息(我这里以浙江省为例):

33.html

所以我们可以通过如下方式获取真实的URL保存到一个列表中:

url = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/index.html"
# provinceLink = "33.html"
provinceURL = url[:-10] + provinceLink

市级页面分析

市级信息提取

我们进入到浙江省中。具体的分析跟上面的省级页面分析类似,不再赘述。下面是市级页面分析图:

市级页面分析.png

下级链接获取

市级页面的URL:

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/33.html

下级页面的URL(我这里以杭州市为例):

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/33/3301.html

页面中提取到的信息(我这里以杭州市为例):

33/3301.html

区级页面分析

区级信息提取

我们进入到杭州市中。具体的分析跟上面的省级页面分析类似,不再赘述。下面是区级页面分析图:

区级页面分析.png

下级链接获取

区级页面的URL:

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/33/3301.html

下级页面的URL(我这里以上城区为例):

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/33/01/330102.html

页面中提取到的信息(我这里以上城区为例):

01/330102.html

街道页面分析

街道信息提取

我们进入到上城区中。具体的分析跟上面的省级页面分析类似,不再赘述。下面是街道页面分析图:

街道页面分析.png

下级链接获取

街道页面的URL:

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/33/01/330102.html

街道页面的URL(我这里以湖滨街道为例):

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/33/01/02/330102003.html

页面中提取到的信息(我这里以湖滨街道为例):

02/330102003.html

居委会页面分析

居委会信息提取

我们进入到湖滨街道中。具体的分析跟上面的省级页面分析类似,不再赘述。下面是居委会页面分析图:

居委会页面分析.png

这里已经到了最底层,没有下级链接了。


国家统计局的统计用区划代码和城乡划分代码爬取—第一版

下面我们开始一步步爬取过程。

导入库

import requests
from lxml import etree
import csv

主页面爬取过程

url = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/index.html"
headers={
   
   'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}

这里需要注意一下,国家统计局的统计用区划代码和城乡划分代码网页的编码为gb2312。一般我都采用下面的代码来获取页面:

data = requests.get(url,headers = headers).text

但是在碰到这个编码方式时会出现乱码,所以做出如下改变:

response = requests.get(url,headers = headers)
response.apparent_encoding
'GB2312'
response.encoding = response.apparent_encoding
data = response.text

页面解析过程

省级名称、URL获取
selector = etree.HTML(data)
provinceList = selector.xpath('//*[@class="provincetr"]')
provinceList
[<Element tr at 0x54a4c88>,
 <Element tr at 0x54b4148>,
 <Element tr at 0x54b4188>,
 <Element tr at 0x54b41c8>]
for i in provinceList:
    provinceName = i.xpath('td/a/text()')
    provinceLink = i.xpath('td/a/@href')

下面是根据获取到的每个省的链接进行补全,得到真实的URL。

provinceURL = provinceLink
for i in range(len(provinceLink)):
    for j in range(len(provinceLink[i])):
        provinceURL[i][j][0] = url[:-10] + provinceLink[i][j][0]
provinceURL[0:2]
['http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/11.html',
 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/12.html']
市级代码、URL获取
cityCode = [] #第二维的数组
cityLink = []
cityName = []
for provURL in provinceURL:
    response = requests.get(provURL,headers = headers)
    response.encoding = response.apparent_encoding
    data = response.text
    selector = etree.HTML(data)
    cityList = selector.xpath('//tr[@class="citytr"]')
    #下面是抓取每一个城市的代码、URL
    Code = [] #第一维的数组:里面存储了一个省下辖的市的信息
    Link = []
    Name = []
    for i in cityList:
        Code.append(i.xpath('td[1]/a/text()'))
        Link.append(i.xpath('td[1]/a/@href'))
        Name.append(i.xpath('td[2]/a/text()'))
    cityCode.append(Code)
    cityLink.append(Link)
    cityName.append(Name)
cityCode[3][0:2]
[['140100000000'], ['140200000000']]
cityLink[3][0:2]
[['14/1401.html'], ['14/1402.html']]
cityName[3][0:2]
[['太原市'], ['大同市']]

下面是根据获取到的每个市的链接进行补全,得到真实的URL。

cityLink[0][0][0]
'11/1101.html'
cityURL = cityLink
for i in range(len(cityLink)):
    for j in range(len(cityLink[i])):
        cityURL[i
统计区划代码城乡划分代码发布说明: 一、编制依据 2008年7月,国务院批复同意国家统计局与民政部、住建部、公安部、财政部、国土部、农业部共同制定的《关于统计划分城乡的规定》(国函〔2008〕60号),自2008年8月1日实施,正式奠定了统计划分城乡的理论依据方法基础。随后,国家统计局印发《统计区划代码城乡划分代码编制规则》(国统字〔2009〕91号)。 二、区划范围 统计区划代码城乡划分代码区划范围,是国家统计局开展统计调查的区划范围。未包括我国台湾省、香港特别行政区、澳门特别行政区。 三、发布内容 12位统计区划代码3位城乡分类代码。 四、适用领域 《国务院关于统计划分城乡规定的批复》(国函〔2008〕60号)明确指出:“本规定作为统计划分城乡的依据,不改变现有的行政区划、隶属关系、管理权限机构编制,以及土地规划、城乡规划等有关规定”。各级各部门在使用统计区划代码城乡划分代码时,请务必结合实际情况。 五、几个具体问题的说明 (一)补充编制开发区统计汇总识别码情况。为满足统计调查工作组织数据汇总的需要,国家统计局对一些符合条件的开发区编制了统计汇总识别码。统计汇总识别码在统计区划代码的县级码段上编制,其码段为71~80。 (二)关于河北省沧州市任丘市的苟各庄镇、鄚州镇、七间房乡、保定市高阳县的龙化乡统计区划代码临时调整情况的说明。按照河北省委、省政府关于对雄安新区周边部分区域实施托管的通知要求,沧州市任丘市的苟各庄镇、鄚州镇、七间房乡划归雄县实施统计上托管,保定市高阳县的龙化乡划归安新县实施统计上托管。为确保统计调查工作的顺利开展, 国家统计局对苟各庄镇、鄚州镇、七间房乡、龙化乡的统计用十二位区划代码进行了临时调整,具体调整为:鄚州镇代码由130982104000变更为130638106000;苟各庄镇代码由130982105000变更为130638107000;七间房乡代码由130982206000变更为130638205000;龙化乡代码由130628204000变更为130632203000。上述变更后的统计区划代码为临时代码,待民政部门对雄安新区上述4个乡镇区划调整确认后,再将临时代码变更为正式统计区划代码。 (三)关于黑龙江省大兴安岭地区县级单位统计区划代码调整情况说明。民政部民函〔2018〕50号文件撤销黑龙江省大兴安岭地区漠河县(六位区划代码为232723),设立漠河市(六位区划代码为232701)。为执行国家标准,保证统计部门与民政部门名称相同的县级单位六位区划代码的一致性,国家统计局根据《统计区划代码城乡划分代码编制规则》(国统字〔2009〕91号),调整黑龙江省大兴安岭地区所辖的加格达奇区、松岭区、新林区呼中区的六位统计区划代码,具体调整为:加格达奇区代码由232701变更为232761;松岭区代码由232702变更为232762;新林区代码由232703变更为232763;呼中区代码由232704变更为232764。 (四)此版本区划代码与第四次全国经济普查区划代码的相关说明。此版本区划代码是调查截止日期为2018年10月31日的统计区划代码。由于第四次全国经济普查清查工作于2018年8月开始,四经普的清查登记工作中采用2018年6月15日的统计区划代码。第四次全国经济普查数据处理使用2018年10月31日的统计区划代码
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值