零基礎掌握百度地圖興趣點獲取POI爬蟲(python語言爬取)(基礎篇)


實現目的:爬取昆明市范圍內的全部中學數據,包括名稱、坐標。

先進入基礎篇,本篇主要講原理方面,並實現步驟分解,為python代碼編寫打基礎。 
因為是0基礎開始,所以講得會比較詳細。 
如實現目的所講,爬取昆明市全部中學數據,就是獲取百度地圖上昆明市范圍內所有關鍵字帶中學的地理信息數據(興趣點)。 
怎么把百度地圖上的數據抓取下來呢? 
以下是教程: 
本篇目錄如下: 
1. 百度地圖開放平台注冊,AK獲取 
2.關於ak的說明 
3.請求URL說明 
4.百度地圖坐標拾取器 
5.以坐標范圍獲取興趣點POI 
6.用excel完成URL陣列

1.百度地圖開放平台注冊,AK獲取。 
(1) 
如果想獲取POI數據,首先要登陸百度地圖開放平台(http://lbsyun.baidu.com/),完成注冊。 
這個平台是百度地圖為開發者提供接口用的,有很多其他的功能,這里只講POI爬取相關。 
當然,有百度賬號的話,直接登陸就可以。 
這個界面很熟悉,不多說。 

(2)登陸百度地圖開放平台后,按照圖面上的序號操作。 
一、點擊進入控制台; 
二、點擊進入創建應用; 
三、起個應用名稱; 
四、如果有必要,設置個IP白名單啥的,限制調用ak的電腦; 
五、提交。 
六、其他默認,不用改。 

然后你就能看到自己創建的ak了。 

2.關於ak的說明。 
關於這部分的解釋,詳細的可以看開發文檔——web服務API部分。 

這里說一下配額方面的問題。 
首先百度不支持你創建了一個ak就可以隨便用,對於大多數未認證用戶,每天的配額是有限的,不能超過十萬次,每分鍾不能超過6千次。 
當然這個配額主要是觸發定位功能的。 
在爬取POI上,用一次ak生成的URL頁面只能顯示20個興趣點的信息,而一個坐標范圍內,最多能生成20個URL頁面。 
也就是說,一個坐標范圍內,用ak生成的URL頁面最多能爬取到400個興趣點的信息。 
如果昆明市中學不超過400個,那么一個坐標范圍就夠了,但是如果超過400個,那就不夠用了。 
關於ak配額的說明先到這里,下面的步驟詳解中還會涉及到。 
3.請求URL說明。 
把下面這個網址復制到瀏覽器里看看。 
http://api.map.baidu.com/place/v2/search?query=中學&region=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
是不是生成了下面的一個頁面? 

這就是爬取到的一頁昆明中學的信息。 
然后我們分段解釋這行URL。 
http://api.map.baidu.com/place/v2/search?query=中學&region=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
http://api.map.baidu.com/place/v2/search? 這個前綴就是在百度地圖(API)上尋找。 
query=中學 查詢關鍵字是中學。 
region=昆明 查詢地區是昆明。 
output=json 以json格式來輸出。 
ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO ak是9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO。(這個就是剛才申請的ak,圖上打了馬賽克,我為了寫教程便於理解,沒有給它設置IP白名單,就放在這里了,大家練習用吧。) 
這行URL很好理解,照貓畫虎,如果我要找北京的飯店,其URL就是:http://api.map.baidu.com/place/v2/search?query=飯店&region=北京&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

但我們發現,網頁上呈現的數據一共就四五條,昆明的中學,北京的飯店,不可能就這么幾個。 
接着以昆明的中學為例,對這個URL進行改進。 
http://api.map.baidu.com/place/v2/search?query=中學&region=昆明&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
把這個URL復制到瀏覽器里看一看,仔細數一下網頁上爬下來的中學數量,20個。 
從這個實踐中能理解上文中提到的,每個URL頁面只能顯示20個興趣點的信息了吧! 
然后把兩個URL仔細對比一下: 
第一個: 
http://api.map.baidu.com/place/v2/search?query=中學&region=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
第二個: 
http://api.map.baidu.com/place/v2/search?query=中學&region=昆明&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
看看這兩個有什么不同? 
第二個多了一個page_size=20&page_num=0,這個是什么意思呢?一共能生成20個URL頁面,這個是第0個,我們知道,程序語言的排號,一般都是從0開始的。 
把page_size=20&page_num=0改成page_size=20&page_num=1,試一試,看看第二個頁面生成了什么,再改成page_size=20&page_num=2…… 
改成page_size=20&page_num=19的時候,URL是http://api.map.baidu.com/place/v2/search?query=%E4%B8%AD%E5%AD%A6&region=%E6%98%86%E6%98%8E&page_size=20&page_num=19&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

改成page_size=20&page_num=20試一試,URL是http://api.map.baidu.com/place/v2/search?query=%E4%B8%AD%E5%AD%A6&region=%E6%98%86%E6%98%8E&page_size=20&page_num=20&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO。 
顯示的是下圖,沒有興趣點,這回好理解上文中提到的,一個坐標范圍內,最多能生成20個URL頁面了吧! 

這回我們知道了URL最多就能爬取400個興趣點,那我們要獲取的興趣點數量遠遠超過400個,可怎么辦呢? 
別急,接着往下看。

4.百度地圖坐標拾取器 
在回答上面的問題之前,我們先了解一個工具,就是坐標拾取器。 
進入開發文檔——工具支持——坐標拾取器。 
打開坐標拾取器,進入百度地圖坐標拾取系統。 

在這個拾取坐標系統上,一,先設定范圍;二,在地圖上點一下;三,看到當前坐標點如下,復制一下,就可以得到這點的百度坐標了。 
自己估摸着一個矩形范圍,拾取一個左下角坐標,再拾取一個右上角坐標。 

要是實在估摸不好,找一張全國行政區划圖看看。 
這個稍微有點麻煩,我以后會再寫一個教程介紹怎么獲取行政區域范圍。 
拾取一個昆明范圍的矩形坐標。 
左下角:102.174112,24.390894 
右上角:103.678942,26.548645 
(獲取矩形左下角和右上角坐標值的簡捷方式在進階篇中。)

5.以坐標范圍獲取興趣點POI。 
我們現在已經知道昆明的坐標范圍了。 
那么把上面的URL改一改。 
這個是上文中的URL:http://api.map.baidu.com/place/v2/search?query=中學&region=昆明&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
改動后的URL:http://api.map.baidu.com/place/v2/search?query=中學& bounds=24.390894,102.174112,26.548645,103.678942&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
對比一下,有什么不一樣的! 
之前的范圍屬性是:region=昆明 
改動后的范圍屬性是:bounds=24.390894,102.174112,26.548645,103.678942 
注意,經緯度范圍是bounds=左下角緯度,左下角經度,右上角緯度,右上角經度。 
其他的都沒有變化,以坐標范圍爬取,也只能最多爬400個興趣點。 
好了,回答之前提出的問題,如果興趣點數量遠超過400個,怎么辦? 
可以把矩形范圍分割啊! 
把昆明市的范圍換成經緯度,左下角和右上角構成了一個矩形,如果一塊矩形中的興趣點超過了400個,那么我們可以把這個矩形切分,變成四個矩形。分別獲取四個小矩形范圍內的興趣點,然后匯總。 
四個不夠的話,切分成八個,八個不夠的話,切分成十六個,只要保證每個矩形內興趣點不超過400個就行。 
至於應該切分多少個,怎么切分,靠經驗,自己估摸。 
說到這里,這就是后續python編程的思路了。 

6.用excel完成URL陣列。 
這個算是為之后的python爬蟲腳本編寫預熱了。 
我們用excel強化一下編碼思路。

目的: 
爬取昆明市中學的興趣點POI。 
關鍵詞:中學 
已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
昆明市坐標范圍: 
左下角:24.390894,102.174112 
右上角:26.548645,103.678942 
URL模板: 
http://api.map.baidu.com/place/v2/search?query=中學& bounds=24.390894,102.174112,26.548645,103.678942&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

把坐標范圍輸入到excel中,計算4個矩形的范圍,然后4個矩形對應4列URL(page_num值0到19),用excel函數生成了4列共80個URL。 

在這些URL中,只有兩個屬性是有變動的,既是bounds(邊界范圍),page_num(頁碼0-19),其他都是不變化的。 
URL的生成是有規律可循的。 
這就是編程的思路,代碼篇講解。

 

轉自-------http://blog.csdn.net/sinat_41310868/article/details/78746094


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM