POI是一切能夠抽象爲空間點的現實世界的實體,好比餐館,酒店,車站,停車場等。POI數據具備空間座標和各類屬性,是各類地圖查詢軟件的基礎數據之一。百度地圖做爲國內頂尖的地圖企業,其上具備豐富的POI數據,要獲取其上的POI數據能夠根據百度地圖提供的API,可是這種方式有限制,能獲取的數據極少。本文將詳細介紹經過模擬HTTP請求的方式獲取其上的POI數據。web
當咱們在百度地圖的搜索框中經過輸入關鍵字進行搜索時,這其實就是發送一個HTTP請求到百度的服務器,而後服務器返回數據。json
打開網頁的調試面板能夠清楚的看到這些請求 以及服務器返回的數據 這些數據都是JSON格式的 在地址欄中輸入請求的url http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=%E4%BA%BA%E5%90%8D%E5%B9%BF%E5%9C%BA&c=289&src=0&wd2=&sug=0&l=17&b=(13522376.995,3640442.635;13522548.995,3641718.635)&from=webmap&biz_forward={%22scaler%22:1,%22styles%22:%22pl%22}&sug_forward=&tn=B_NORMAL_MAP&nn=0&u_loc=13506522,3642064&ie=utf-8&t=1500039457397 服務器
以後便能看到返回的JSON數據 將這些JSON文本複製到JSON在線校驗的網站(如 www.json.cn)上能夠更清楚的看到其中的信息網站
如上圖所示 一個url返回這樣一些數據 我提取的是其中content節點中的數據 在這個節點中 一個url最多返回十條數據 一條數據中包含不少個子節點數據 其中 編碼
x,y節點中的數據能夠用來獲取這條數據的座標信息 百度的座標系統有百度米制座標和百度經緯度座標 從x,y節點數據通過轉換便可得到這兩個座標,這個在稍後的會講解。url
要想經過程序模擬構建url來發送http請求 就須要先了解url的參數構成 通過本人的屢次嘗試 將url參數減小爲spa
http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=人民廣場&c=289&pn=0調試
最重要的就是最後三個參數 wd是搜索的關鍵詞 c是搜索區域對應的城市編碼,上海市對應的就是289 pn是返回數據的頁碼 不一樣的搜索關鍵詞返回的數據的頁數是不一樣的 由於百度會返回不少相關的信息(POI數據)blog
我是經過關鍵詞獲得百度百度返回的POI數據的 這就須要在url的參數中輸入不一樣的關鍵詞和頁碼來獲取不一樣的POI數據 那麼事先就應該準備不少搜索的關鍵詞 儘量多的關鍵詞能夠獲取更多的POI 數據 下篇會講解該如何準備百萬級別的搜索關鍵字utf-8