標籤:
直接開門見山了,放出先:
1、http://blog.jjonline.cn/soft/J_Position/ajing.sql.gz
phpmyadmin壓縮匯出的mysql庫,庫名:ajing,內有6個表,一個表不帶尾碼的是未經處理資料,每一行是一個村,從省至村;另外5個帶尾碼的表是相關聯的,關聯id為各自的行政編碼,例如湖北省id為420(其實是42,資料庫中省份編碼均是3位元字,最後一個0是多餘的),宜昌市id為4205(然後用8個0補齊就是420500000000),當陽市(我的家鄉,縣級市)為420582(然後用6個0補齊就是420582000000),以此類推。
大小: 17164601 位元組(16.3M)
修改時間: 2014年7月16日, 13:02:02
MD5: A170D11E82A2532CE29574C46739B9CA
SHA1: 6D0FE378E2D6AB007E5F5977B4039E9E28DE5431
CRC32: 2AABF023
2、http://blog.jjonline.cn/soft/J_Position/ajing_position.7z
這個是phpmyadmin匯出的sql檔案,與第一個檔案是一致的,然後使用360壓縮軟體壓縮7z格式,原始sql檔案170幾兆太大了。
大小: 10363487 位元組(9.88M)
修改時間: 2014年7月16日, 13:09:03
MD5: 2A3916A6617F7507FADB98E34341F59E
SHA1: 517F07DC7221BAE0DA5857BB77941E50388B4CE0
CRC32: C4FF8237
3、http://blog.jjonline.cn/soft/J_Position/j_position.7z
這個檔案是第一個檔案中提到的mysql庫中的不帶尾碼的表。
大小: 6206567 位元組(5.91M)
修改時間: 2014年7月15日, 23:08:57
MD5: EC7F7F500E7888FB36639FD76A598337
SHA1: E0EE991F7B2AE8B1EA96DDBF49BADF7B6434B853
CRC32: 75D1A75A
4、http://blog.jjonline.cn/soft/J_Position/positionJson.7z
這個檔案是讀取網頁後產生的json格式的資料檔案,分市(city)、縣(county)、鎮(town)以及村(village)分別儲存的json尾碼的文字檔,文字格式設定為json。每個省下的市縣鎮村均已該省代碼明明,例如湖北省下的市為./positionJson/city/420.json、縣為./positionJson/county/420.json、鎮為./positionJson/town/420.json、村為./positionJson/village/420.json,以此類推。
這個json檔案主要是為了各位自己去讀取並按照自己的格式要求插入資料庫的。
大小: 5384282 位元組(5.13M)
修改時間: 2014年7月16日, 13:12:22
MD5: D862A925839F1358984607A63E79C701
SHA1: E47DD7C7BC2A815E15664D7529C7DC2268B8CB36
CRC32: EDB0B0AC
====
還記得兩年前,那個時候對PHP還不甚瞭解,就是找本文所分享的東西,網上找到的資料要麼非常老舊,要麼不全;然後每個群裡到處發訊息找人要,當時的想法很簡單,就是群裡一定有做電商的程式猿,找他們拿一個全國省、市、縣的統計資料相當的簡單,結果等了一天沒任何反應;要麼是人家覺得太簡單不理咱這個菜鳥,要麼是大家各忙各的,壓根就沒時間去理會一條渺小的訊息。
這個事情給我的觸動非常大,網路上知識雖多,卻也不乏錯誤、不全乃至老舊的問題,或一篇文章你抄我我抄你的這種情況;需求者往往要花費較多的時間去搜尋、甄別;最可惡的是常常會看到一篇有錯誤或並不完善的文章被轉來轉去,搜尋的關鍵詞翻了幾十頁還能看到的情況......
嗯,貌似跑題了,還是回入正題。本文分享的省、市、縣、鎮、村的資料來源為:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/index.html 這個網址就不介紹了,這個資料來源是目前最新、最全乃至最權威的資料來源。
該資料來源是html格式的,需要先爬html頁面,然後按關聯關係讀出裡面的資料,剛開始寫的程式是邊爬頁面邊讀出資料,沒考慮到需要讀取的總html檔案數高達4萬多個,程式運行了12個小時候才發現有些資料爬漏了(資料來源伺服器偶爾犯渾返回404錯誤,而程式裡沒處理這種情況),發現這個問題後就改變了策略,先down下這個資料來源裡的所有頁面資料,然後讀本地的html資料產生json檔案,down完後再寫程式邊讀邊檢查,確保該資料來源裡的所有html頁面均成功down到本地。down到本地並檢查完整性,這個過程持續了16個小時,索性程式自動化進行,就是時間太長了點-------4萬多個html頁面,縱使一個html花費1秒,也需要4萬多秒(十幾個小時),還算正常,加之完整性檢查16個小時還算可以吧!
(下載的所有html檔案夾屬性)
接下來就是正則匹配各個頁面(並處理各個頁面的關聯關係成mysql欄位),產生了上述第四個檔案夾中的所有json檔案,然後讀這些json檔案插入到mysql中,最終產生了完整的省、市、縣、鎮、村的庫,供其他應用調用。這個過程,產生json比較耗時,一個省(省、直轄市並列處理)平均需要30分鐘,31一個省(以及直轄市)花了大半天;然後讀json插入資料庫,這個比較快,每1000條一個插入,2個多小時就搞定。
(讀取json插入mysql時本地虛擬機器內的centos資源情況)
有人問:“為什麼不直接讀html並處理後直接插入msyql,還要產生json後再讀了插入?”其實這是為了其他程式猿調用方便而已,我這裡的json實際上也可以被認為是一種資料存放區的方式而已。
看本文第二種圖,本地虛擬機器內的小512M記憶體的centos記憶體已被吃光,swap也快耗盡。
全國各省、市、縣、鎮、村的mysql資料庫和JSON格式資料