最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬蟲實(shí)例_利用百度地圖API批量獲取城市所有的POI點(diǎn)

 更新時間:2018年01月10日 10:14:34   作者:WenWu_Both  
下面小編就為大家分享一篇Python爬蟲實(shí)例_利用百度地圖API批量獲取城市所有的POI點(diǎn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

上篇關(guān)于爬蟲的文章,我們講解了如何運(yùn)用Python的requests及BeautifuiSoup模塊來完成靜態(tài)網(wǎng)頁的爬取,總結(jié)過程,網(wǎng)頁爬蟲本質(zhì)就兩步:

1、設(shè)置請求參數(shù)(url,headers,cookies,post或get驗(yàn)證等)訪問目標(biāo)站點(diǎn)的服務(wù)器;

2、解析服務(wù)器返回的文檔,提取需要的信息。

而API的工作機(jī)制與爬蟲的兩步類似,但也有些許不同:

1、API一般只需要設(shè)置url即可,且請求方式一般為“get”方式

2、API服務(wù)器返回的通常是json或xml格式的數(shù)據(jù),解析更簡單

也許到這你就明白了,API簡直就是開放的“爬蟲”呀,可以告訴你,基本就是這個意思。好的,言歸正傳,本篇我們就演示如何運(yùn)用Python結(jié)合百度地圖API來批量獲取POI(興趣點(diǎn))。

所謂POI(興趣點(diǎn)),指的是人們感興趣,比較常去的地方,比如銀行、醫(yī)院、學(xué)校等,利用城市的POI的空間屬性可以做非常多的事情,至于什么事情呢,此處省略10000字。。。

說干就干,Let's go!

(1)創(chuàng)建百度地圖應(yīng)用

訪問百度地圖API需要一個信令(AK),打開百度地圖開放平臺,點(diǎn)擊右上角“API控制臺”,即進(jìn)入了百度地圖的開發(fā)界面。

選擇“創(chuàng)建應(yīng)用”-應(yīng)用類型勾選“瀏覽器端”–勾選所用到的服務(wù)(一般全選即可),此時就創(chuàng)建好了應(yīng)用賬號,得到“AK”

(2)Place API 及Web服務(wù)API

打開百度地圖API的POI模塊,網(wǎng)址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi,這個頁面詳細(xì)介紹了Place API的請求參數(shù)及返回數(shù)據(jù)的情況。

可以看到,Place API 提供區(qū)域檢索POI服務(wù)與POI詳情服務(wù)。

1. 區(qū)域檢索POI服務(wù)提供三種區(qū)域檢索方法:

a.城市內(nèi)檢索(對應(yīng)JavaScriptAPI的Search方法)

b.矩形檢索(對應(yīng)JavaScript API的SearchInBound方法)

c.圓形區(qū)域檢索(對應(yīng)JavaScript的SearchNearBy方法)。

2. POI詳情服務(wù)提供查詢單個POI的詳情信息,如好評。

并給出了請求的一個示例,設(shè)置檢索城市為北京,檢索關(guān)鍵字為“飯店”,檢索后返回10條數(shù)據(jù):

http://api.map.baidu.com/place/v2/search?q=飯店&region=北京&output=json&ak=您的AK

將上述url粘貼到瀏覽器里,返回的數(shù)據(jù)如下:

上圖是將返回的json數(shù)據(jù)解析之后的結(jié)果,可以看到,服務(wù)器返回了10條北京市的飯店的信息,包括飯店名稱、經(jīng)緯度、地址、聯(lián)系電話等。

具體的參數(shù)設(shè)置,自行去該網(wǎng)頁去看吧,這里就不再贅述,這里我們主要利用“矩形檢索”的方式來獲取整個城市的特定POI信息,其url格式如下:

http://api.map.baidu.com/place/v2/search?query=美食&page_size=10&page_num=0&scope=1&bounds=39.915,116.404,39.975,116.414&output=json&ak={您的密鑰}

通過實(shí)驗(yàn)可以發(fā)現(xiàn),一個矩陣區(qū)域最多返回400(20*20)個POI點(diǎn),即page_size = 20 & page_total = 20,雖然官方文檔里說一個區(qū)域返回760+都不成問題的,但是測試了一下,發(fā)現(xiàn)并沒有這么多,最多400個。

顯然,整個城市不可能僅400個特定描述的POI點(diǎn),所以我們需要對整個城市進(jìn)行分片操作,然后每片進(jìn)行訪問,通過Python的循環(huán)實(shí)現(xiàn)。

(3)獲取城市特定POI點(diǎn)集合

比如:我們想獲取北京市四環(huán)以內(nèi)所有飯店的信息,即可通過上述步驟借助Python快速實(shí)現(xiàn),廢話不多說,直接上代碼:

# -*- coding: utf-8 -*-
# Python 2.7
# 提取城市的POI點(diǎn)信息并將其保存至MongoDB數(shù)據(jù)庫
import urllib2 
import json 
from pymongo import MongoClient
left_bottom = [116.282387,39.835862]; # 設(shè)置區(qū)域左下角坐標(biāo)(百度坐標(biāo)系)
right_top = [116.497405,39.996569]; # 設(shè)置區(qū)域右上角坐標(biāo)(百度坐標(biāo)系)
part_n = 2; # 設(shè)置區(qū)域網(wǎng)格(2*2)
client = MongoClient('localhost',27001)
db = client.transdata
db.authenticate("user", "password")
col = db.taxi; # 連接集合
url0 = 'http://api.map.baidu.com/place/v2/search?';
x_item = (right_top[0]-left_bottom[0])/part_n;
y_item = (right_top[1]-left_bottom[1])/part_n;
query = '飯店'; #搜索關(guān)鍵詞設(shè)置
ak = 'xxxxxxxxxxxxxxxxxxxxxx'; #百度地圖api信令
n = 0; # 切片計(jì)數(shù)器
for i in range(part_n):
 for j in range(part_n):
 left_bottom_part = [left_bottom[0]+i*x_item,left_bottom[1]+j*y_item]; # 切片的左下角坐標(biāo)
 right_top_part = [right_top[0]+i*x_item,right_top[1]+j*y_item]; # 切片的右上角坐標(biāo)
 for k in range(20):
  url = url0 + 'query=' + query + '&page_size=20&page_num=' + str(k) + '&scope=1&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ','+str(right_top_part[1]) + ',' + str(right_top_part[0]) + '&output=json&ak=' + ak; 
  data = urllib2.urlopen(url);
  hjson = json.loads(data.read());
  if hjson['message'] == 'ok':
  results = hjson['results'];  
  for m in range(len(results)): # 提取返回的結(jié)果
   col.insert_one(results[m]);
 n += 1;
 print '第',str(n),'個切片入庫成功'

執(zhí)行為上述代碼,運(yùn)行結(jié)果如下:

可以看到,我們將北京市四環(huán)以內(nèi)區(qū)域分成4個切片來進(jìn)行處理,之所以分切片處理,主要是單個區(qū)域訪問最多返回400個結(jié)果,當(dāng)區(qū)域較大的時候,區(qū)域內(nèi)往往不止400個,所以講大區(qū)域進(jìn)行切片處理,最后,我們通過數(shù)據(jù)聚合操作,發(fā)現(xiàn)返回的結(jié)果總共1014個。(理論上應(yīng)該返回1600,實(shí)際返回1014,說明切片的數(shù)量是合適的)

好的,我們本篇的分享到這里就要結(jié)束了,最后只想說,API真的是個好東西,科學(xué)地使用它我們可以做出很多炫酷的應(yīng)用,像現(xiàn)在比較活躍的數(shù)據(jù)型應(yīng)用,其數(shù)據(jù)接口基本都是基于API形式的,后面的分享我們還會用到更多API的,大家一起期待吧,哈哈,今天就到這里了,各位回見。

相關(guān)文章

  • python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)器的方法

    python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)器的方法

    這篇文章主要介紹了python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)器的方法,涉及Python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)的技巧,支持TCP和UDP協(xié)議,需要的朋友可以參考下
    2015-03-03
  • Python爬取梨視頻的示例

    Python爬取梨視頻的示例

    這篇文章主要介紹了Python爬取梨視頻的示例,幫助大家更好的利用python進(jìn)行爬蟲的學(xué)習(xí)與使用,感興趣的朋友可以了解下
    2021-01-01
  • python中利用numpy.array()實(shí)現(xiàn)倆個數(shù)值列表的對應(yīng)相加方法

    python中利用numpy.array()實(shí)現(xiàn)倆個數(shù)值列表的對應(yīng)相加方法

    今天小編就為大家分享一篇python中利用numpy.array()實(shí)現(xiàn)倆個數(shù)值列表的對應(yīng)相加方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python實(shí)現(xiàn)電子產(chǎn)品商店

    python實(shí)現(xiàn)電子產(chǎn)品商店

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)電子產(chǎn)品商店,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Django+boostrap 美化admin后臺的操作

    Django+boostrap 美化admin后臺的操作

    這篇文章主要介紹了Django+boostrap 美化admin后臺的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python Numpy 實(shí)現(xiàn)交換兩行和兩列的方法

    Python Numpy 實(shí)現(xiàn)交換兩行和兩列的方法

    今天小編就為大家分享一篇Python Numpy 實(shí)現(xiàn)交換兩行和兩列的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python DataFrame實(shí)現(xiàn)固定周期內(nèi)統(tǒng)計(jì)每列的非零值

    Python DataFrame實(shí)現(xiàn)固定周期內(nèi)統(tǒng)計(jì)每列的非零值

    在數(shù)據(jù)處理中,使用DataFrame統(tǒng)計(jì)固定周期內(nèi)每列的非零值數(shù)量是一種常見需求,通過將數(shù)據(jù)分組并使用計(jì)數(shù)函數(shù),可以方便地實(shí)現(xiàn)此目標(biāo),具體方法包括首先計(jì)算每列的0值個數(shù),然后通過總數(shù)減去0值個數(shù)得到非零值的數(shù)量
    2024-09-09
  • 淺析Python中的方法重載

    淺析Python中的方法重載

    方法重載在?Python?中起著至關(guān)重要的作用,?這篇文章主要為大家詳細(xì)介紹了Python中方法重載及其優(yōu)點(diǎn)的相關(guān)知識,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-10-10
  • Python實(shí)現(xiàn)批量翻譯CAD圖紙

    Python實(shí)現(xiàn)批量翻譯CAD圖紙

    這篇文章主要為大家詳細(xì)介紹了如何通過Python實(shí)現(xiàn)批量翻譯CAD圖紙,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12
  • Jupyter notebook 不自動彈出網(wǎng)頁的解決方案

    Jupyter notebook 不自動彈出網(wǎng)頁的解決方案

    這篇文章主要介紹了Jupyter notebook 不自動彈出網(wǎng)頁的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評論

额尔古纳市| 宁河县| 勃利县| 东丽区| 金湖县| 宁远县| 雷波县| 盐亭县| 普陀区| 新乐市| 安康市| 元朗区| 石门县| 翁源县| 顺义区| 稻城县| 临湘市| 大埔区| 芜湖市| 互助| 奉新县| 大同市| 五莲县| 陇川县| 栾城县| 崇左市| 富川| 康保县| 金乡县| 肥城市| 阳西县| 岳池县| 华宁县| 天峻县| 齐河县| 高邮市| 余干县| 喀什市| 富顺县| 肥乡县| 喜德县|