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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章