python抓取百度隨機抓取百度街景圖片

最近公司有一個需求就是隨機抓取10萬張百度街景地圖,剛開始沒有什么頭緒,最后還是解決了,在這里分享一下。
毫無疑問,這些圖片肯定是異步加載的,打開百度地圖的街景模式,f12打開開發(fā)者模式,清空所有響應,并點擊向前


百度街景.png

可以看到產(chǎn)生了很多的圖片

image.png

正是這些圖片拼接成了街景的360VR模式,但是我們并不需要全部的,只需要道路的街景。
經(jīng)過觀察發(fā)下,這個鏈接才是我們想要的接口
url = "https://mapsv0.bdimg.com/?qt=pr3d&fovy=35&quality=80&panoid=09000200121706161142304748F&heading=13.579&pitch=0&width=198&height=108"
image.png

其中panoid=09000200121706161142304748F是這個圖片的唯一標識,鏈接最后是設(shè)置圖片的大小。而且這個panoid也是有一定一定規(guī)律的,理論上遍歷這個id,雖然有很多錯誤,但是肯定是能滿足需求的。
那么這個panoid是怎么來的呢?仔細查看結(jié)果可以看出來
image.png

接口為url=“https://mapsv0.bdimg.com/?qt=sdata&sid=09000200011704011540405782F&pc=1&udt=20180706&fn=jsonp.p3991630
由這個sid=09000200011704011540405782F可以得到結(jié)果
image.png

可以看到第一個PID和SID是相等的,由此可以推斷每一個PID都是一個低點的道路圖片標識,把PID傳入上方鏈接則會返回附近點的圖片標識,如此遍歷循環(huán),就能獲取一條道路的所有圖片。
但是這個SID是怎么來的呢?
打開百度地圖并切換到全景將鼠標放在地圖上,可以看到隨著鼠標的移動會不斷的產(chǎn)生response.
image.png

鏈接示例 url= "https://mapsv0.bdimg.com/?udt=20180706&qt=qsdata&x=12736165.723753473&y=3539379.7796100094&l=17.031000000000002&action=0&mode=day&t=1530956939770&fn=jsonp22844820"
結(jié)果的產(chǎn)生只與x與y的值有關(guān)。
響應的結(jié)果如下:
image.png

其中包含了道路名稱,我們想要的sid,還有拍攝這個照片的坐標值,當然這個坐標不是GPS而是百度地圖自己的坐標。
由于街景地圖只有道路有,所以地圖的很多地方都是沒有結(jié)果的。只有在道路附近才會返回正確的sid,而且距離太近返回的sid也是一致的。
所以最后大概有三種方法可以滿足我的條件,一個是暴力的循環(huán)pid,錯誤就忽略正確就返回結(jié)果。另一個就是在一條道路尋找一個種子pid,然后爬取整條道路的所有圖片。最后一種就是根據(jù)百度地圖的坐標,設(shè)置一個區(qū)域,遍歷整個區(qū)域的所有坐標,正確就返回pid,錯誤就不處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容