python抓取百度随机抓取百度街景图⽚
新鹿鼎记演员表
最近公司有⼀个需求就是随机抓取10万张百度街景地图,刚开始没有什么头绪,最后还是解决了,在这⾥分享⼀下。
毫⽆疑问,这些图⽚肯定是异步加载的,打开百度地图的街景模式,f12打开开发者模式,清空所有响应,并点击向前
百度街景.png
可以看到产⽣了很多的图⽚
image.png
520表白情话很甜暖心句子大全
正是这些图⽚拼接成了街景的360VR模式,但是我们并不需要全部的,只需要道路的街景。
经过观察发下,这个链接才是我们想要的接⼝
url = "mapsv0.bdimg/?
qt=pr3d&fovy=35&quality=80&panoid=09000200121706161142304748F&heading=13.579&pitch=0&width=198&height=108"
image.png
其中panoid=09000200121706161142304748F是这个图⽚的唯⼀标识,链接最后是设置图⽚的⼤⼩。⽽且这个panoid也是有⼀定⼀定规律的,理论上遍历这个id,虽然有很多错误,但是肯定是能满⾜需求的。
那么这个panoid是怎么来的呢?仔细查看结果可以看出来
image.png
接⼝为url=“mapsv0.bdimg/?
qt=sdata&sid=09000200011704011540405782F&pc=1&udt=20180706&fn=jsonp.p3991630”
由这个sid=09000200011704011540405782F可以得到结果
image.png
可以看到第⼀个PID和SID是相等的,由此可以推断每⼀个PID都是⼀个低点的道路图⽚标识,把PID传⼊上⽅链接则会返回附近点的图⽚标识,如此遍历循环,就能获取⼀条道路的所有图⽚。
但是这个SID是怎么来的呢?
打开百度地图并切换到全景将⿏标放在地图上,可以看到随着⿏标的移动会不断的产⽣response.
image.png万有引力常量
链接⽰例 url= "mapsv0.bdimg/?
udt=20180706&qt=qsdata&x=12736165.723753473&y=3539379.7796100094&l=17.031000000000002&action=0&mode=day
&t=1530956939770&fn=jsonp22844820"
结果的产⽣只与x与y的值有关。
响应的结果如下:坦克世界t20
image.png
其中包含了道路名称,我们想要的sid,还有拍摄这个照⽚的坐标值,当然这个坐标不是GPS⽽是百度地图⾃⼰的坐标。
交通银行信用卡进度查询由于街景地图只有道路有,所以地图的很多地⽅都是没有结果的。只有在道路附近才会返回正确的sid,⽽且距离太近返回的sid也是⼀致的。
假如我不曾爱你 我不会失去自己
所以最后⼤概有三种⽅法可以满⾜我的条件,⼀个是暴⼒的循环pid,错误就忽略正确就返回结果。另⼀个就是在⼀条道路寻⼀个种⼦pid,然后爬取整条道路的所有图⽚。最后⼀种就是根据百度地图的坐标,设置⼀个区域,遍历整个区域的所有坐标,正确就返回pid,错误就不处理。