緣由
最近做一個小型微信商城,因為要用到省市區收貨地址的原因(雖然之前整理過,但是數據太老了),所以上網搜了一下相關資料,
結果找到的東西要么數據太老了,要么就是表是分開的(省市區存了三張表),索性自己動手。
我們需要的是一個類似下面這樣的數據結構,區域ID,上級ID,區域名稱,等級,排序,狀態
建好表后,我們有很多解決方案去填充里面的數據
1.做好后台UI,丟給運營去慢慢錄入,是時候折磨一下他們了。
2.找找靠譜的數據源轉換一下然后批量插入,網上大把的js和xml數據源,但是數據是不是最新的就不好說了。
解決
我搜了一下國家統計局的官網,發現了這樣的一個欄目
http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/
找到最新的一篇
http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html
看到這里,是不是第一反應就是趕緊爬下來,然后分析html標簽,拿到編碼和名稱,然后插入到數據庫?有這個反應是正常的,畢竟都是碼農。
但是這樣就太麻煩了,又是創建項目又是寫正則分析dom之類的,我們換一種簡單的方法,
因為這個頁面引用了jquery,所以我們干脆就用js來解決吧,打開chrome 按 F12, 在 console 下面輸入
var element=$('.MsoNormal'),s="",start=99,index=1; element.each(function(){ var arr=$(this).text().split(' '); var id=$.trim(arr[0]); var name=$.trim(arr[1]); var parent=0; var level=3; var sort=0; if(id.indexOf('0000')>-1){ level=1; sort=start-index; index++; } else if(id.substring(4)=="00"){ level=2; parent=id.substring(0,2)+"0000"; } else{ parent=id.substring(0,4)+"00"; } s+="INSERT INTO [Sys_Area] ([AreaId],[ParentId],[AreaName],[AreaLevel],[DisplaySequence])"; s+="VALUES ("+id+",'"+parent+"','"+name+"',"+level+","+sort+")"; s+=";"; }) console.log(s)
我們就能得到一個完整的最新的省市區數據腳本了,插入數據庫即可,然后完善一下后台的管理UI(樹用的是zTree)
是不是很方便,而且數據是最新的,簡陽已經划到成都下面了,重慶下面的很多縣也改成區了。
但是要注意的一點有部分地區下面是沒有三級區域的,比如中山、東莞等,這個根據自己的情況維護一下就是了。
另外這個數據庫表也比較簡單,可以根據自己項目情況加上 首字母,全拼,簡拼等字段。
后記
寫了這么多年代碼了,從未混跡過大公司,今天突發奇想開了博客記錄一下自己的一些土鱉實戰的心得吧,請各位大牛手下留情。