高德地圖之根據矩形範圍爬取範圍內的分類POI資料
之前寫了一篇在城市範圍內根據關鍵字爬取POI資料的部落格,由於一個城市的POI資料量太大,高德地圖介面容易返回錯誤資料,因此有個比較好的辦法就是藉助高德地圖POI搜尋中根據多邊形範圍或矩形範圍搜尋POI資料,具體分為兩個步驟:其一是將城市分為多個小矩形(得到左上和右下兩個頂點的座標即可);二是根據得到的矩形座標呼叫高德地圖WEB API得到資料解析即可。這篇文章主要是記錄根據矩形範圍搜尋POI的流程,至於如何切分城市為矩形,我也還沒弄過,可以自行百度搜索解決。
先看下爬取到的資料吧:
http://restapi.amap.com/v3/place/polygon?polygon=116.80708,31.449926,117.510206,32.247823&key=c5304f29d1a11f14c4fb29854a831ef0&extensions=all&offset=25&page=1&keywords=%E5%A4%A7%E5%AD%A6
引數說明:
polygon:多邊形邊界範圍(或者是矩形左上和右下兩個頂點座標)
key : 高德地圖web api申請的金鑰key
extensions :此項預設返回基本地址資訊;取值為all返回地址資訊、附近POI、道路以及道路交叉口資訊。
offset :分頁的頁大小
page:請求的頁碼
其餘的具體引數介紹詳見文件說明。
可以在瀏覽器看到示例URL返回的資料。剩餘的就是迴圈獲取資料,然後解析入庫的事情了,挺簡單的。這裡就直接貼上程式碼了:
from urllib.parse import quote from urllib import request import json import xlwt # TODO amap_web_key = '你申請的AK' # 高德地圖官網申請的Web API KEY filename = r'C:\study\hehe.xls' # 爬取到的資料寫入的EXCEL路徑 # 矩形邊界集合 polygon_list = ['116.80708,31.449926,117.510206,32.247823','116.80708,31.449926,117.158643,31.8488745','116.80708,31.449926,116.9828615,31.64940025','116.9828615,31.449926,117.158643,31.64940025','116.80708,31.64940025,116.9828615,31.8488745','116.9828615,31.64940025,117.158643,31.8488745','117.158643,31.449926,117.510206,31.8488745','117.158643,31.449926,117.3344245,31.64940025','117.3344245,31.449926,117.510206,31.64940025','117.158643,31.64940025,117.3344245,31.8488745','117.158643,31.64940025,117.24653375,31.749137375','117.24653375,31.64940025,117.3344245,31.749137375','117.158643,31.749137375,117.24653375,31.8488745','117.24653375,31.749137375,117.3344245,31.8488745','117.3344245,31.64940025,117.510206,31.8488745','116.80708,31.8488745,117.158643,32.247823','117.158643,31.8488745,117.510206,32.247823','117.158643,31.8488745,117.3344245,32.04834875','117.3344245,31.8488745,117.510206,32.04834875','117.3344245,31.8488745,117.42231525,31.948611625','117.42231525,31.8488745,117.510206,31.948611625','117.3344245,31.948611625,117.42231525,32.04834875','117.42231525,31.948611625,117.510206,32.04834875','117.158643,32.04834875,117.3344245,32.247823','117.3344245,32.04834875,117.510206,32.247823'] # POI分類集合 #class_list = ['商城', '超級市場'] type_list = '060401|060402|060403|060404|060405|060406|060407|060408|060409|060411|060413|060414|060415|060100|060101|060102|060103' poi_search_url = "http://restapi.amap.com/v3/place/polygon" # URL offset=25 # 分頁請求資料時的單頁大小 # 根據矩形座標獲取poi資料 def getpois(polygon, type_list): i = 1 current_polygon_poi_list = [] while True: # 使用while迴圈不斷分頁獲取資料 result = getpoi_page(polygon, i, type_list) result = json.loads(result) # 將字串轉換為json #print('第', str(i),'頁,結果',result) if result['status'] is not '1': # 介面返回的狀態不是1代表異常 print('======爬取錯誤,返回資料:' + result) break pois = result['pois'] if len(pois) < offset: # 返回的資料不足分頁頁大小,代表資料爬取完 current_polygon_poi_list.extend(pois) break current_polygon_poi_list.extend(pois) i += 1 print('===========當前polygon:', polygon,',爬取到的資料數量:' ,str(len(current_polygon_poi_list))) return current_polygon_poi_list # 單頁獲取pois ''' http://restapi.amap.com/v3/place/polygon?polygon=116.80708,31.449926,117.510206,32.247823&key=c5304f29d1a11f14c4fb29854a831ef0&extensions=all&offset=5&page=1 ''' def getpoi_page(polygon, page, type_list): req_url = poi_search_url + "?key=" + amap_web_key + '&extensions=all&polygon=' + polygon + '&offset=' + str(offset) + '&types=' + type_list + '&page=' + str(page) + '&output=json' data = '' with request.urlopen(req_url) as f: data = f.read() data = data.decode('utf-8') return data # 資料寫入excel def write_to_excel(poilist, filename): # 一個Workbook物件,這就相當於建立了一個Excel檔案 book = xlwt.Workbook(encoding='utf-8', style_compression=0) sheet = book.add_sheet('0', cell_overwrite_ok=True) # 第一行(列標題) sheet.write(0, 0, 'id') sheet.write(0, 1, 'name') sheet.write(0, 2, 'location') sheet.write(0, 3, 'type') for i in range(len(poilist)): sheet.write(i + 1, 0, poilist[i]['id']) sheet.write(i + 1, 1, poilist[i]['name']) sheet.write(i + 1, 2, poilist[i]['location']) sheet.write(i + 1, 3, poilist[i]['type']) book.save(filename) all_poi_list = [] #爬取到的所有資料 for polgon in polygon_list: polygon_poi_list = getpois(polgon, type_list) all_poi_list.extend(polygon_poi_list) print('爬取完成,總的數量', len(all_poi_list)) write_to_excel(all_poi_list, filename) print('寫入成功')
自己執行的話需要修改的地方都在程式碼上方位置,具體的說明在程式碼中已有註釋。
相關推薦
高德地圖之根據矩形範圍爬取範圍內的分類POI資料
之前寫了一篇在城市範圍內根據關鍵字爬取POI資料的部落格,由於一個城市的POI資料量太大,高德地圖介面容易返回錯誤資料,因此有個比較好的辦法就是藉助高德地圖POI搜尋中根據多邊形範圍或矩形範圍搜尋POI資料,具體分為兩個步驟:其一是將城市分為多個小矩形(得到左上和右
高德地圖駕車跨城路線爬取
我要爬取這張地圖的底圖的那些線。 F12找到url https://report.amap.com/crossCityStatis/queryAll.do?date=2018-10-16 寫程式碼處理這些資料 import pandas as pd
(六)高德地圖之駕車路線規劃
在專案中用到地圖的地方往往會有導航功能,那麼這一節將介紹一下使用高德地圖來實現駕車路線規劃的功能。 首先來兩張示例圖供參考: &nbs
(五)高德地圖之新增groundoverlay覆蓋物
本節主要實現的功能是往地圖上新增一個groundoverlay覆蓋物,用此方式可以實現公園電子導遊,下面先來看一張效果圖吧: 接下來我們還是直接上程式碼: 新建佈局檔案activity_groundoverlay.xml <?xml version="1.0" encod
(四)高德地圖之定位的幾種模式
這一節主要實現的功能是地圖定位的幾種模式,包括展示、定位、追隨、旋轉、旋轉位置、跟隨不移動中心點、旋轉不移動中心點、旋轉位置不移動到中心點,我們根據實際需要來選擇用那種模式。下面還是主要從程式碼中來體現,主要部分有註釋。 還是先新建佈局檔案:activity_locationmodesour
(三)高德地圖之自定義縮放及縮放動畫效果
這一節主要實現的功能是地圖的自定義縮放及縮放的動畫效果,還是直接放上程式碼更直觀些,主要部位裡面基本有註解 還是老樣子,首先是新建activity_zoom_animate.xml佈局檔案 <?xml version="1.0" encoding="utf-8"?> <
(二)高德地圖之手勢互動
上一結主要介紹瞭如何繼承高德地圖,以及地圖的幾種不同的顯示方式,那麼本節我們接著往下看,這一節主要介紹地圖的手勢互動功能,其中包括滑動手勢(地圖是否可以滑動)、縮放手勢(是否可以通過手勢放大縮小地圖)、切斜手勢以及旋轉手勢,另外又加了兩小部分,地圖的單擊、長按、觸控事件,比如點一下獲取地圖上點選
(一)高德地圖之基本屬性以及顯示模式
我們在開發中常常會用到地圖功能,那麼我們最常用的就是百度地圖和高德地圖了,今天我們就來看一下高德地圖怎麼用,我個人認為高德地圖封裝的還是比較好的,使用起來方便快捷。 首先我們需要到高德開發者平臺註冊賬號,根據API進行操作即可,高德開放平
高德地圖之軌跡回放
最近專案中有需要做車輛的軌跡回放功能,在這裡就給打分享一下還是挺簡單的。 <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Com
高德地圖之周邊搜尋及兩點間距離計算(Poi的使用)
最近比較閒,所以就順便研究高德地圖,原因是之前基本上都用的百度地圖,但是百度地圖的程式碼太多了,兩字,很煩。 先來個效果圖: 藍色的marker就是點選的,藍色的圓圈是我當前位置。 apk下載地址:http://download.csdn.net/de
安卓高德地圖API根據城市名獲取對應的經緯度和地理編碼
private void getLatlon(String cityName){ GeocodeSearch geocodeSearch=new GeocodeSearch(con
Android高德地圖之多InfoWindow
本文是高德地圖系列的最後一文,因為光是寫這幾篇博文,就花去了我一整天時間,什麼也沒做,甚至飯也沒吃,做了一整天,現在身體已經空蕩蕩了,而且最近一段時間工作很忙,每天都很累,所以打算多去鍛鍊身體。有任何疑問也可以留言。 最終效果:生成marker並顯示詳情
高德地圖之改變圖示
一、準備工作 1、獲取LatLng物件 2、可以通過BitmapDescriptorFactory獲得一個BitmapDescriptor物件。 3、定義了一個marker的選項 二、核心程式碼:
高德地圖之地理編碼
首先申明是地理編碼呢?地理編碼,又稱為地址匹配,是從已知的地址描述到對應的經緯度座標的轉換過程。該功能適用於根據使用者輸入的地址確認使用者具體位置的場景,常用於配送人員根據使用者輸入的具體地址找地點。既地理編碼(地址轉座標)。 下面一步步來看怎麼實現的:
高德地圖之逆地理編碼
上一篇講述了地理編碼的使用,沒看的朋友可以看看http://blog.csdn.net/hedong_77/article/details/54287292,Ok,我們繼續來看你地理編碼,首先要理解它的概念,逆地理編碼,又稱地址解析服務,是指從已知的經緯度座標到
Android高德地圖之基礎
最終效果圖1:選擇日曆選擇日期,其中有下標的日期是有資料的,點選顯示當天地圖上的資料 效果圖2: 生成marker並顯示詳情 由於不能上傳2M以上的截圖,只錄了重點,廢話不多講,速度上車。 - 申請賬號 http://lbs.amap.com
高德地圖JavaScript根據後臺座標點繪製軌跡
專案中用到所以看了一下,可以完善之處請指正 <script type="text/javascript"> //這裡可以傳入後臺的json資料,類似此格式
高德地圖之拾取地點
高德地圖官方有API,有文件,但是大家懂的,有些東西並沒有說明。所以,我打算將自己實現對高德地圖展示、定位以及導航的功能步驟做一個總結,分享給大家。本文作為總結高德地圖使用,首先總結自己對於拾取地點這樣的功能的實現。 第一步,準備工作: 首先,我們需要去
python實戰之網路爬蟲(爬取新聞內文資訊)
(1)前期準備:開啟谷歌瀏覽器,進入新浪新聞網國內新聞頁面,點選進入其中一條新聞,開啟開發者工具介面。獲取當前網頁資料,然後使用BeautifulSoup進行剖析,程式碼: import requests from bs4 import BeautifulSoup res = requests.
喜歡抖音上面的音樂怎麼辦?用Python爬取音樂並分類放置資料夾
最近小編也在刷著抖音,上面的小哥哥、小姐姐各個都是人才,小編超喜歡裡面的 歌也挺好聽的,小編就打算把抖音上面歌曲都下載並且分類,把自己的喜歡的歌換成手機鈴聲,那麼抖音上面都有那些好聽的歌呢,比如: 《最美的期待》 周筆暢 《那個人》 周延英 《Panama》 Matteo 《病變