FME爬取百度POI數據

背景

百度提供了豐富的POI數據,有些場景下我們需要把這些數據放到內網環境下,這個時候就要想辦法把數據爬下來。

學習準備

百度API接口學習

百度API提供了一個叫Place API獲取poi的接口,有個城市內檢索 實例爲
http://api.map.baidu.com/place/v2/search?query=美食&page_size=10&page_num=0&scope=1&region=北京&output=json&ak={您的密鑰}
它返回的是個json類型數據,一個區域最大返回數爲400,每頁最大返回數爲20。顯然一個城市內不管什麼類別的poi,不可能只有400個,會遺漏數據,故舍去此方法。

還有一個矩形區域檢索,實例爲
http://api.map.baidu.com/place/v2/search?query=美食&page_size=10&page_num=0&scope=1&bounds=30.915,121.404,30.975,121.414&output=json&ak={您的密鑰}
只要區域劃分得當(相對小一點),就可以爬下想要的數據。

FME學習

Tiler函數 用來拆分爬取範圍,相對
裁剪的參數越大區域越小
HTTPCaller 發出url請求
XMLFragmenter解析。

思路

使用百度的矩形區域檢索方式爬取數據,因爲單次最多隻能爬取400條記錄所以區域太大的話就進行分割,用分割後的區域發起爬取請求。
1,指定採集區域範圍,根據座標範圍大小以及POI專題的密集程度使用Tiler函數將區域拆分爲很多個小區域,如爬取上海市的居民小區可考慮100×100的網格。
2,將切分後的網格傳遞給自定義的函數。函數傳入參數:參見API接口參數,執行循環一次請求最大返回400條記錄,分頁爲20條記錄需要循環20次。函數內部實現了返回json數據的解析,所以輸出的參數爲需要爬取信息對應的字段。

操作截圖

在這裏插入圖片描述
分割爬取區域,並獲取區域座標範圍值。

在這裏插入圖片描述
自定義循環函數,用於分割區域的poi數據的請求、分頁獲取、解析工作。

在這裏插入圖片描述
函數內部實現細節。

結果展示

在這裏插入圖片描述
以上內容實現了百度poi的爬取

注意點

有如下注意點:
1,抓取之前要弄清楚百度的關鍵詞設置,保證抓取更精準
可以參考:http://lbsyun.baidu.com/index.php?title=lbscloud/poitags
2,抓取數據量比較大時考慮使用代理,不然ip會被百度封掉
3,普通key抓取量每天有限制好像是6000,可申請多個key輪流抓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章