從統計局採集最新的省市區鎮資料,用js在瀏覽器中執行 V2
本文描述的是對國家統計局於 2019-01-31
釋出的《2018年統計用區劃程式碼和城鄉劃分程式碼(截止2018年10月31日)》的採集。
相對於用於和採集 2016版
、 2017版
的js程式碼做了比較大的優化和調整,就開一遍文章來介紹這個V2版本。老版本文章。
19-03-22 新採集了2018的城市資料
資料下載 GitHub: https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releases
資料預覽

資料來源
國家統計局統計標準 《2018年統計用區劃程式碼和城鄉劃分程式碼(截止2018年10月31日)》 ,截稿時是最新的。

資料採集
對於資料採集,根據工作需要,對於一些小的資料採集功能有些接觸。因為對 html
和 js
熟些,很早以前就用 IE瀏覽器
對本地 html
檔案支援任意跨域 ajax
請求資料、和支援讀寫 Excel檔案
,就直接寫一個 html檔案
作為採集工具給別人使用,批量查詢人員資料、考試結果什麼的功能。所以採集省市區資料主要用的 js
。
由於新版本chrome對編碼有問題,統計局的是 gb2312
,會亂碼, chrome 41
古董版本沒有問題,所以採集都是在 chrome41
下完成的, 自己製作Chrome便攜版實現多版本共存 。
1. 抓取原始資料
涉及原始碼: 1_抓取國家統計局城市資訊.js
進入統計局頁面,執行程式碼即可完成抓取,開了4個模擬的執行緒,抓取省市區鎮4級資料還是很快的,採集了3400+頁面,首次執行大概1分多鐘完成採集(我這個截圖是開了瀏覽器快取,所以有4秒的假象,編寫本文時有個url掛逼了,不知道是不是統計局伺服器出了問題)。

抓取完成後會自動彈出儲存檔案資料。
2. 拼音轉換
這個需要找一個介面對文字進行拼音轉換,只有一個要求: 重慶
能正常的翻譯成 chong qing
即可,翻譯成 zhong qing
的就low了。滿足這個條件,百度上搜索到的翻譯小網站99%就被幹掉了。
另外Github上很多star很高的開源庫的轉換表現也並不理想,試過 hotoo/pinyin
,開了分詞,多音字的結果還是不是差了一點半點,放棄了。最後採用的 hankcs/HanLP 的python庫來進行轉換,對地名多音字的支援還是有限的, 都
字地名很多轉換成 dou
囧,不過在同類型裡面算是最好的。
還是以前找到的翻譯介面 https://www.qqxiuzi.cn/zh/pinyin/
對拼音的轉換準確度最高,據說 依據《新華字典》、《現代漢語詞典》等規範性辭書校對
。不過這個站從去年開始對IP會有限制,以前是隨便轉換,從2017版資料採集開始進行了剋制處理,整個翻譯過程介面呼叫不超過10次,中間可能需要換1-3次代理(已實現用js自動化切換代理)。
轉換過程
因為本次採集的資料量比較多,省市區3級資料僅3400來條,但包含了鎮這級的4.2萬多條資料,轉換壓力有點大。因此採取了省市區3級使用 qqxiuzi
的高準確度介面,鎮級的採用本地 HanLP
轉換介面。並且轉換時採用全名稱進行轉換,相比以前使用精簡的短名多音字方面稱更加準確。
本地用HanLP庫進行轉換一遍,低準確度
涉及原始碼: 2_1_抓取拼音.js
先開啟拼音轉換 python服務
,服務程式在Github .pinyin-python-server 目錄內,根據介紹進行執行。
然後在剛才那個抓取頁面裡執行js程式碼即可。寫稿時重新轉了一遍,用了4個模擬執行緒,花了5分鐘時間,4.7萬條資料全部轉完。

為啥不用 python
直接轉,非要走一遍http請求?答:不會寫,也方便不用本地搭建服務,使用線上開發介面(可能會開放,這部分參考我別的文章,因為可能會寫一篇拼音轉換的)。
使用qqxiuzi對省市區3級重新轉換一遍,高準確度
涉及原始碼: 2_2_抓取拼音.js
在 http://www.qqxiuzi.cn/zh/pinyin/
執行程式碼,然後根據提示匯入上一步儲存的資料即可,再次執行程式碼即可,如果被遮蔽IP,需要手動切換代理,或者根據原始碼裡面的提示設定 SwitchyOmega
自動切換代理。

整個轉換過程大概需要1分鐘左右,查詢有效代理慢的話可能需要更久。(原始碼裡面快取拼音結果部分程式碼錯誤,等下次採集在修復吧,寫稿子時候發現的)
3. 處理資料和匯出CSV
涉及原始碼: 3_格式化.js
處理資料就相對簡單些了,但花的時間最多,因為要去分析資料。額外添加了港澳臺海外4個數據。另外去掉民族自治區、州、縣、旗;民族鄉、鎮字尾。還有去掉統計出來比較多的幾個字尾, 市|縣|鎮|鄉|街道|街道辦事處|地區辦事處|社群服務中心
,有些比較少的字尾沒有去掉,去掉有可能有些地名有歧義。
程式碼執行完成就自動彈出儲存csv檔案資料了。

最後
資料下載和相關問題請到 Github檢視: https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov
releases內有處理好的3級或者4級 csv資料提供下載。
如果這個庫有幫助到您,請 Star 一下。