mysql省市区数据表的设置以及python数据获取

前言

最近工作需要做一个省市区表格的数据。之前一直是偷懒用的网上的数据。这次决定自己写一个好用的方法,一劳永逸的解决这个问题。

1.准备

既然要一直更新省市区的数据,那自然得有一个官方的地址库咯。开始找的是国家统计局上面的数据,然后准备写python爬虫开始爬取数据的。
但是写到后面和我的朋友一个朋友聊起这个的时候。他推荐了民政局的省市区资料。
因为统计局的资料实在是太详细了,都要某某街道某某居委会了。其实是没有必要的。民政局只有省市区的数据也是够用了的。

2.代码

虽然我主力写的是java,但是之前也看了很久的python,也写过一些爬虫什么的。在数据处理上还是决定用python来处理。最后生成需要的sql语句即可
然后需要安装是的 BeautifulSoup和lxml,python的版本是3.6
2个省市区的地址分别是:
民政局:http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/20180708230813.html
统计局:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/
下面是详细的代码

# -*- coding:UTF-8 -*-
from urllib import request
from bs4 import BeautifulSoup
class area(object):
    def __init__(self, id, name, pid, rank):
        self.id = id
        self.name = name
        self.pid = pid
        self.rank = rank

if __name__ == "__main__":
	#创建txt文件
    file = open('insert.sql', 'w', encoding='utf-8')
    download_url = 'http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/20180708230813.html'
    head = {}
    head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
    download_req = request.Request(url = download_url, headers = head)
    download_response = request.urlopen(download_req)
    download_html = download_response.read().decode('utf8','ignore')
    soup_texts = BeautifulSoup(download_html, 'lxml')
    texts = soup_texts.find_all(class_ = 'xl708733')
    list1 = []
    for child in texts:
        if(any(child)):
            list1.append(child.get_text())
    list2 = []
    for i in range(0, len(list1), 2):
        a = area(list1[i],list1[i+1],'0','0')
        list2.append(a)
    for i in range(0, len(list2), 1):
        if int(list2[i].id) % 100 > 0:
            list2[i].pid = str(int(list2[i].id) - int(list2[i].id) % 100)
            list2[i].rank = '3'
            continue
        if int(list2[i].id) % 10000 > 0:
            list2[i].pid = str(int(list2[i].id) - int(list2[i].id) % 10000)
            list2[i].rank = '2'
            continue
        list2[i].rank = '1'
        list2[i].pid = '0'
    file.write("INSERT INTO sjy_network_address VALUES (110100,\'市辖区\',110000,2);")
    file.write('\n')
    file.write("INSERT INTO sjy_network_address VALUES (120100,\'市辖区\',120100,2);")
    file.write('\n')
    file.write("INSERT INTO sjy_network_address VALUES (310100,\'市辖区\',310100,2);")
    file.write('\n')
    file.write("INSERT INTO sjy_network_address VALUES (500100,\'市辖区\',500100,2);")
    file.write('\n')
    for child in list2:
    	file.write("INSERT INTO sjy_network_address VALUES ("+child.id+",\'"+child.name+"\',"+child.pid+","+child.rank+");")
    	file.write('\n')

3.补充说明

今天突然发现好坑。新疆,湖北和海南的最后几个市没有规律,要手动修改一下,加一个省直辖县市,还有东莞市,中山市,嘉峪关市,儋州市,三沙市,只有市没有区,还有河北省济源市,重庆市的一些县区

INSERT INTO sjy_network_address VALUES (429000,'直辖县市',420000,2);
INSERT INTO sjy_network_address VALUES (469000,'直辖县市',460000,2);
INSERT INTO sjy_network_address VALUES (659000,'直辖县市',650000,2);
INSERT INTO sjy_network_address VALUES (442001,'市辖区',442000,3);
INSERT INTO sjy_network_address VALUES (441901,'市辖区',441900,3);
INSERT INTO sjy_network_address VALUES (620201,'市辖区',620200,3);
INSERT INTO sjy_network_address VALUES (460401,'市辖区',460400,3);
INSERT INTO sjy_network_address VALUES (460301,'市辖区',460301,3);
INSERT INTO sjy_network_address_time VALUES (419000,'直辖县市',410000,2);
UPDATE sjy_network_address_time SET pid=500100 WHERE pid=500200

4.最后

如果实在偷懒不想看。那最后有一个结果。我把生成的mysql文件放了下载
https://download.csdn.net/download/qq_33562996/10953741

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值