本文記錄如何從中華人民共和國國家統計局官網提取中國大陸地區的行政區劃信息,數據入庫,並通過Shell腳本實現整個過程。項目代碼託管在GitLab,包含Shell腳本、數據庫數據表、文本數據、從MySQL中導出的SQL數據。
Prerequisite
Short Name | Name | English Name |
---|---|---|
ROC | 中華民國 | Republic of China |
PRC | 中華人民共和國 | People’s Republic of China |
數據來源 中華人民共和國國家統計局
根據最新的2016年版信息,中國目前有34
個省級行政區,包括23
個省(含臺灣省)、5
個自治區、4
個直轄市、2
個特別行政區(香港特別行政區、澳門特別行政區)。但 區劃代碼和城鄉劃分代碼 不包括(臺灣省、香港特別行政區、澳門特別行政區)。
中國大陸地區按地理位置可分為六塊
Geographical Division | Provice Lists |
---|---|
1 華北 |
北京市、天津市、河北省、山西省、內蒙古自治區 |
2 東北 |
遼寧省、吉林省、黑龍江省 |
3 華東 |
上海市、江蘇省、浙江省、安徽省、福建省、江西省、山東省 |
4 中南 |
河南省、河北省、湖北省、廣東省、廣西壯族自治區、海南省 |
5 西南 |
重慶市、四川省、貴州省、雲南省、西藏自治區 |
6 西北 |
陝西省、甘肅省、青海省、寧夏回族自治區、新疆維吾爾族自治區 |
各省份簡稱
region | code | name | short name |
---|---|---|---|
華北 | 11 | 北京市 | 京 |
華北 | 12 | 天津市 | 津 |
華北 | 13 | 河北省 | 冀 |
華北 | 14 | 山西省 | 晉 |
華北 | 15 | 內蒙古自治區 | 蒙 |
東北 | 21 | 遼寧省 | 遼 |
東北 | 22 | 吉林省 | 吉 |
東北 | 23 | 黑龍江省 | 黑 |
華東 | 31 | 上海市 | 滬 |
華東 | 32 | 江蘇省 | 蘇 |
華東 | 33 | 浙江省 | 浙 |
華東 | 34 | 安徽省 | 皖 |
華東 | 35 | 福建省 | 閩 |
華東 | 36 | 江西省 | 贛 |
華東 | 37 | 山東省 | 魯 |
中南 | 41 | 河南省 | 豫 |
中南 | 42 | 湖北省 | 鄂 |
中南 | 43 | 湖南省 | 湘 |
中南 | 44 | 廣東省 | 粵 |
中南 | 45 | 廣西壯族自治區 | 桂 |
中南 | 46 | 海南省 | 瓊 |
西南 | 50 | 重慶市 | 渝 |
西南 | 51 | 四川省 | 川 |
西南 | 52 | 貴州省 | 黔 |
西南 | 53 | 雲南省 | 滇 |
西南 | 54 | 西藏自治區 | 藏 |
西北 | 61 | 陝西省 | 陝 |
西北 | 62 | 甘肅省 | 甘 |
西北 | 63 | 青海省 | 青 |
西北 | 64 | 寧夏回族自治區 | 寧 |
西北 | 65 | 新疆維吾爾自治區 | 新 |
臺灣 | 臺 | ||
香港特別行政區 | 港 | ||
澳門 | 澳 |
Rules Explanation
規則依據來自 統計用區劃代碼和城鄉劃分代碼編制規則。
為規範統計用區劃代碼和城鄉劃分代碼,建立各項普查、全面統計、抽樣調查、專項調查統一使用的《統計用區劃代碼和城鄉劃分代碼庫》,特制定本規則。
統計用區劃代碼 和 城鄉劃分代碼 分為2段共17
位,前者由第1~12位代碼構成,後者由13~17位代碼構成,其中第13~14位為 城鄉屬性代碼 ,第16~17為 城鄉分類代碼 。
Statistical Division Code
統計用區劃代碼基本長度為
12
位,省、地、縣、鄉四級代碼不足12位用0
補足。
統計用區劃代碼
共12位,行政區劃按行政級別共分為5級。
Division Level | Position | Length | English | Explanation |
---|---|---|---|---|
省級 |
1~2 | 2 | Province | 包含省、直轄市、自治區 |
地市級 |
3~4 | 2 | City | 各省、自治區的地級市,各直轄市的市轄區 |
縣級 |
5~6 | 3 | Country | 各直轄市的市轄區,各地級市所轄的區、市、縣 |
鄉級 |
7~9 | 3 | Town | 各街道辦事處或鄉鎮 |
村級 |
10~12 | 3 | Village | 各社區居委會 、各村委會 |
縣以上行政區劃代碼由1~6位代碼組成。在統計工作中,各級統計部門不編制縣以上行政區劃代碼,統一採用《中華人民共和國行政區劃代碼》國家標準。
縣以下區劃代碼由7~12位代碼組成,包括 鄉級代碼 和 村級代碼 兩部分。
Level | Code Range | Position | Length | Explanation |
---|---|---|---|---|
鄉級 | 001~099 |
7~9 | 3 | 街道 |
鄉級 | 100~199 |
7~9 | 3 | 鎮 |
鄉級 | 200~399 |
7~9 | 3 | 鄉 |
鄉級 | 400~599 |
7~9 | 3 | 類似鄉級單位 (民政部門未確認的開發區、工礦區、農場等) |
村級 | 001~199 |
10~12 | 3 | 居民委員會 |
村級 | 200~399 |
10~12 | 3 | 村民委員會 |
村級 | 400~499 |
10~12 | 3 | 類似居民委員會(不含498代碼) |
村級 | 500~599 |
10~12 | 3 | 類似村民委員會(不含598代碼) |
村級 | 498 |
10~12 | 3 | 虛擬社區 (街道、鎮以及類似鄉級單位的開發區、科技園區、工業園區、工礦區、高校園區、科研機構園區等) |
村級 | 598 |
10~12 | 3 | 虛擬生活區 (鄉以及類似鄉級單位的農、林、牧、漁場和其它農業活動區域) |
凡民政部門確認的街道、鎮、鄉,按照國家標準《縣級以下行政區劃代碼編制規則》(GB/T 10114—2003)編制,其鄉級代碼為001~399;民政部門未確認的開發區、工礦區、農場等類似鄉級單位,鄉級代碼為400~599。
Urban And Rural Classification Code
城鄉劃分代碼
共5位,含有 城鄉屬性、城鄉分類 2個維度。
Postion | Length | Explanation |
---|---|---|
13~14 | 2 | 城鄉屬性代碼 |
15~17 | 3 | 城鄉分類代碼 |
Attributes Code
城鄉屬性代碼由第13、14位代碼組成。其中:第13位表示鄉級屬性,第14位表示村級屬性。
鄉級屬性代碼表示街道、鎮、鄉以及類似鄉級單位的鄉級屬性。鄉級屬性代碼用1~3數字表示。
村級屬性代碼表示居民委員會(社區)、村民委員會以及類似村級單位的村級屬性。村級屬性代碼用1~9數字表示。
Level | Code Num | Position | Length | Explanation |
---|---|---|---|---|
鄉級 | 1 |
13 | 1 | 縣級政府駐地 |
鄉級 | 2 |
13 | 1 | 連接的鄉級區域 |
鄉級 | 3 |
13 | 1 | 其他鄉級區域 |
村級 | 1 |
14 | 1 | 鄉級政府駐地 |
村級 | 2 |
14 | 1 | 完全連接的村級地域 |
村級 | 3 |
14 | 1 | 部分連接的村級地域 |
村級 | 4 |
14 | 1 | 與其他區、市完全連接的村級地域 |
村級 | 5 |
14 | 1 | 與其他區、市部分連接的村級地域 |
村級 | 6 |
14 | 1 | 與其他鎮完全連接的村級地域 |
村級 | 7 |
14 | 1 | 與其他鎮部分連接的村級地域 |
村級 | 8 |
14 | 1 | 特殊地域 |
村級 | 9 |
14 | 1 | 其他村級地域 |
在城鄉屬性代碼中,特殊地域僅指以下兩種情況:
- 在類似居委會中,常住人口達到或超過3000人的開發區、工礦區、大專院校、科研單位等居民生活區域。
- 在類似村委會中,常住人口達到或超過3000人,且非農產業從業人員達到70%的農、林、牧、漁場及其他以農業活動為主的區域。
當類似居委會、類似村委會不滿足上述要求,也不滿足代碼
1~7
的編制要求時,村級屬性一律編9
。
農、林、牧、漁場
農、林、牧、漁場場部的村級屬性代碼一律編1
,與場部連接的下屬生產單位,村級屬性代碼編2
或3
,與場部不連接的下屬生產單位,村級屬性代碼編9
。當常住人口達到3000人,非農產業從業人員達到70%時,不連接的下屬生產單位的村級屬性代碼編8
。
只有一個村級單位的村級屬性
凡鄉級單位下只有一個村級單位,無論是實際存在還是虛擬的,其對應的村級屬性代碼一律編1
。
不連接的居民委員會 當居民委員會與政府駐地不連接時,如果有農業用地,村級屬性代碼編
9
;如果沒有農業用地(或沒有明確的地域),村級屬性代碼編8
。
Classification Code
城鄉分類代碼
通常由3
位數字構成:
- 首位是
1
表示 城鎮; - 首位是
2
表示 鄉村;
城鄉分類代碼由第15~17位代碼組成。第15位為
1
,表示城鎮;第15位為2
,表示鄉村。
Code Num | Position | Length | Explanation |
---|---|---|---|
111 |
15~17 | 3 | 主城區 |
112 |
15~17 | 3 | 城鄉結合區 |
121 |
15~17 | 3 | 鎮中心區域 |
122 |
15~17 | 3 | 鎮鄉結合區 |
123 |
15~17 | 3 | 特殊區域 |
210 |
15~17 | 3 | 鄉中心區 |
220 |
15~17 | 3 | 村莊 |
Web Crawling Methods
通過命令curl
或wget
抓取html頁面,使用命令sed
、awk
對數據進行處理。
直接使用curl
抓取頁面,返回的數據出現中文亂碼,考慮是編碼問題。使用curl -fsL URL | grep charset
返回的數據中有charset=gb2312
,即頁面採用GB2312
編碼。
解決方案是使用iconv
命令進行編碼轉換,格式
|
|
使用命令
|
|
返回的編碼集中有GB2312
、GBK
、UTF8
、UTF-8
。經過測試源編碼可使用GB2312
或GBK
,目標編碼可使用UTF8
或UTF-8
。
即使用curl -fsL URL | iconv -f GBK -t UTF-8
。
-s quiet靜默模式 –retry 重試次數 –retry-delay 間隔時間 -x 代理 -o保存路徑 ipaddr 代理IP port 代理端口
使用代理進行抓取操作,如 curl -fsL --retry 5 --retry-delay 5 -x ipaddr:port | iconv -f GBK -t UTF-8
使用sed -r '[email protected]<[^>]*>@@g;'
去除HTML頁面中標籤。
Official Page Analysis
對 2016年統計用區劃代碼和城鄉劃分代碼( 相關頁面進行分析。
HTML標籤class類
- 省級:
<tr class='provincetr'></tr>
- 地級:
<tr class='citytr'></tr>
- 縣級:
<tr class='countytr'></tr>
- 鄉級:
<tr class='towntr'></tr>
- 村級:
<tr class='villagetr'></tr>
URL Analysis
- 首頁地址
|
|
- 省級列表地址
|
|
13
是省級區劃代碼,如河北省13
,對應替換為其它省份代碼
- 地級列表地址
|
|
13
是河北省,1306
是保定市,格式是2位省份代碼/地級市代碼
- 縣級列表地址
|
|
13
是河北省,06
在河北省下代表保定,130637
是河北省保定市博野縣,格式是2位省份代碼/2位所屬地級市代碼/縣級代碼
- 鄉級列表地址
|
|
13
是河北省,06
在河北省下代表保定,s
在保定下代表博野縣,130637100
河北省保定市博野縣博野鎮,顯示具體村莊列表信息,格式是2位省份代碼/2位所屬地級市代碼/2位縣級代碼/鄉級代碼
Crawler Codes
首頁地址: index.html
|
|
省級列表地址: 13.html
|
|
地級列表地址: 13/1306.html
|
|
縣級列表地址: 13/06/130637.html
|
|
鄉級列表地址: 13/06/37/130637100.html
|
|
Code Design Architecture
代碼架構設計
按照 省級
–> 地級
–> 縣級
–> 鄉級
–> 村級
層級,逐級操作。為提高操作效率,通過命令parallel
進行多進程操作。數據寫入文本文件,待數據抓取完畢後,導入數據庫。
為簡化操作,不配置代理IP。
共3個核心文件
|
|
file | explanation |
---|---|
cadc_extraction.sh | 數據抓取腳本 |
cadc_database_table.sql | 數據表建表語句 |
cadc_import_database.sh | 數據導入至數據庫腳本 |
SQL Design
文件cadc_database_table.sql
, 存放數據表建表語句,共5張表,關聯表之間有外間約束。
|
|
Data Presentation
year | province | city | country | town | village |
---|---|---|---|---|---|
2013 | 31 | 345 | 3136 | 43854 | 694691 |
2014 | 31 | 346 | 3139 | 40053 | 670427 |
2015 | 31 | 346 | 3137 | 39928 | 667511 |
2016 | 31 | 344 | 3133 | 42866 | 666612 |
|
|
Interesting Name
|
|
以佛祖
二字開頭的村子
province | city | country | town | village |
---|---|---|---|---|
四川省 | 內江市 | 東興區 | 同福鎮 | 佛祖巖村村委會 |
湖北省 | 武漢市 | 江夏區 | 佛祖嶺街道辦事處 | 佛祖嶺村村委會 |
湖北省 | 武漢市 | 江夏區 | 佛祖嶺街道辦事處 | 佛祖嶺社區一區居民委員會 |
湖北省 | 武漢市 | 江夏區 | 佛祖嶺街道辦事處 | 佛祖嶺社區三區居民委員會 |
湖北省 | 武漢市 | 江夏區 | 佛祖嶺街道辦事處 | 佛祖嶺社區二區居民委員會 |
湖北省 | 武漢市 | 江夏區 | 佛祖嶺街道辦事處 | 佛祖嶺社區四區居民委員會 |
湖南省 | 郴州市 | 臨武縣 | 鎮南鄉 | 佛祖村村委會 |
四川省 | 綿陽市 | 遊仙區 | 太平鎮 | 佛祖村民委員會 |
四川省 | 南充市 | 南部縣 | 碾埡鄉 | 佛祖溝村村委會 |
廣東省 | 清遠市 | 清城區 | 橫荷街道辦事處 | 佛祖社區居委會 |
以菩薩
二字開頭的村子
province | city | country | town | village |
---|---|---|---|---|
山西省 | 臨汾市 | 蒲縣 | 黑龍關鎮 | 菩薩凹村委會 |
河南省 | 南陽市 | 淅川縣 | 荊紫關鎮 | 菩薩堂村民委員會 |
河北省 | 邢臺市 | 內丘縣 | 南賽鄉 | 菩薩嶺村委會 |
河北省 | 保定市 | 淶水縣 | 趙各莊鎮 | 菩薩峪村村委會 |
河北省 | 石家莊市 | 井陘縣 | 辛莊鄉 | 菩薩崖村委會 |
遼寧省 | 丹東市 | 東港市 | 菩薩廟鎮 | 菩薩廟村委會 |
山東省 | 青島市 | 膠州市 | 三里河街道辦事處 | 菩薩廟村委會 |
河北省 | 衡水市 | 武強縣 | 武強鎮 | 菩薩村委會 |
四川省 | 南充市 | 高坪區 | 御史鄉 | 菩薩村村民委員會 |
陝西省 | 商洛市 | 鎮安縣 | 月河鎮 | 菩薩殿村委會 |
四川省 | 資陽市 | 樂至縣 | 佛星鎮 | 菩薩灣村村民委員會 |
四川省 | 涼山彝族自治州 | 會東縣 | 堵格鎮 | 菩薩箐村村民委員會 |
北京市 | 市轄區 | 昌平區 | 流村鎮 | 菩薩鹿村委會 |
以閻王
二字開頭的村子
province | city | country | town | village |
---|---|---|---|---|
四川省 | 南充市 | 儀隴縣 | 瓦子鎮 | 閻王坡村委會 |
四川省 | 南充市 | 嘉陵區 | 大通鎮 | 閻王溝村村民委員會 |
山東省 | 萊蕪市 | 萊城區 | 羊裡鎮 | 閻王石村委會 |
以神仙
二字開頭的村子
province | city | country | town | village |
---|---|---|---|---|
湖南省 | 婁底市 | 漣源市 | 渡頭塘鎮 | 神仙侖村 |
湖北省 | 黃岡市 | 浠水縣 | 關口鎮 | 神仙衝村委會 |
湖南省 | 長沙市 | 瀏陽市 | 集裡街道 | 神仙坳社區居委會 |
湖南省 | 永州市 | 道縣 | 仙子腳鎮 | 神仙頭村委會 |
湖南省 | 婁底市 | 新化縣 | 溫塘鎮 | 神仙嶺村委會 |
湖南省 | 永州市 | 零陵區 | 七裡店街道 | 神仙嶺社區 |
河南省 | 南陽市 | 南召縣 | 四棵樹鄉 | 神仙崖村委會 |
貴州省 | 銅仁市 | 石阡縣 | 龍塘鎮 | 神仙廟村委會 |
北京市 | 市轄區 | 通州區 | 於家務回族鄉 | 神仙村委會 |
四川省 | 成都市 | 武侯區 | 芳草街道辦事處 | 神仙樹社區居委會 |
湖南省 | 常德市 | 桃源縣 | 陬市鎮 | 神仙橋村委會 |
湖南省 | 永州市 | 東安縣 | 白牙市鎮 | 神仙橋村村委會 |
四川省 | 成都市 | 金堂縣 | 轉龍鎮 | 神仙橋村民委員會 |
四川省 | 瀘州市 | 瀘縣 | 太伏鎮 | 神仙橋社區居民委員會 |
吉林省 | 延邊朝鮮族自治州 | 汪清縣 | 天橋嶺鎮 | 神仙洞村委會 |
河南省 | 鄭州市 | 新密市 | 尖山風景區管理委員會 | 神仙洞村委會 |
湖南省 | 永州市 | 江華瑤族自治縣 | 白芒營鎮 | 神仙洞村委會 |
廣東省 | 汕頭市 | 潮南區 | 仙城鎮 | 神仙裡村委會 |
Problems
- 文末
^M
出現,使用tr -s "\r\n" "\n"
將其去除 - Shell腳本中自定義函數必須先定義,而後才能調用,位置有先後。將函數返回值賦值給變量,可使用'
function_name
‘實現,反引號包裹函數名
Change Log
- 2016.03.14 00:01 Mon Asia/Beijing
- 初稿完成
- 2016.03.17 20:34 Thu Asia/Beijing
- 數據表設計優化
- 2016.11.11 09:10 Fri Asia/Shanghai
- 數據源更新、數據表結構優化、代碼優化
- 2018.04.22 20:20 Sun America/Boston
- 勘誤,重構,更新,遷移到新Blog