欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬虫练习五(补充): 2018年统计用区划代码和城乡划分代码(附代码与全部数据)

程序员文章站 2022-05-04 16:40:19
...

之前爬取过2017年的数据 详见

Python爬虫练习五:爬取 2017年统计用区划代码和城乡划分代码(附代码与全部数据)

,下面有评论说广东省的数据缺少了东莞与中山两个市的数据,检查网页结构发现确实是代码没考虑到,这两个市没有区级,直接到街道、办事处级了。考虑到代码的复用性、以及唯独此两个市的特殊性,(其实是懒),在源码不变的情况下,添加以下代码处理此两市的数据。

在Spiders.py 下 添加以下函数

def getfourth_special(lists):
    town = {}
    for i in lists:
        # print(url+i[0:2]+'/'+i[2:4]+'/'+i+'.html')
        soup = getsoup(i)
        for j in soup.select('.towntr '):
            # print(j)
            id = str(j.select('td')[0].text)  # 130202001000
            town[id[0:9]] = {'qhdm': id, 'name': j.select('td')[1].text, 'cxfldm': '0'}# 130202001
    return town

def getfifth_special(url,lists):
    village = {}
    for i in lists:
        soup = getsoup(url+i[0:2]+'/'+i[2:4]+'/'+i+'.html')
        for j in soup.select('.villagetr '):
            # print(j)
            id = str(j.select('td')[0].text)  # 110101001001
            village[id[0:12]] = {'qhdm': id, 'name': j.select('td')[2].text, 'cxfldm': j.select('td')[1].text}# 110101001001
    return village

新建special_html.py,程序代码如下:

import Spiders

aimurl="http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/"
city=['http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/44/4419.html',
          'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/44/4420.html']

town = Spiders.getfourth_special(city)
village = Spiders.getfifth_special(aimurl, town)
print(village)
path = r'E:\tjyqhdmhcxhfdm2018\tjyqhdmhcxhfdm2018_' + 'special' + '.txt'
dic = { **town, **village}#字典合并
for i in dic.values():
    with open(path, 'a', encoding='utf-8') as f:
        f.write('"' + i['qhdm'] + '","' + i['name'] + '","' + i['cxfldm'] + '"' + '\n')
print(" write finished!")

执行special_html.py即可得到两市的结果,补进44文档。

注意:如果要爬取最新的统计用区划代码和城乡划分代码,请参照 python爬虫练习五 ,将源码中的2017替换为2018即可正常执行。

  最后,附上全部2017年统计用区划代码和城乡划分代码(截止2017年10月31日)数据,链接如下。

 有积分的给点~: https://download.csdn.net/download/weixin_41710905/11037573

  没积分的网盘 链接:  https://pan.baidu.com/s/1Or6yfKzDvccpuEUBSs7Oag  提取码:p6i9 
 

如果代码、数据有问题,还请多多指正!