今天百度街景的权限申请成功了,所以就试了下之前找到的一个爬取街景的代码,我把原作者导入数据时文件格式txt改成了xlsx,因为表格比较方便批量修改一些内容。
爬取到的街景影像有很多都没有数据,返回的是一些固定的图片,一个一个筛选太麻烦了,所以写了一段代码可以检测到这些影像,并且改名为特定格式,方便后续的一些筛选工作。
直接上代码
import urllib.request #打开网页模块
import urllib.parse #转码模块
import pandas as pd
import os
import requests
#这里的路径可替换为自己保存文件夹的路径
save_path = r'D:\01bachelor\sk04paper\bdSVI/'
ak = "填写你的AK码"
#判断文件夹是否存在,若不存在则创建
if not os.path.exists(save_path):
os.makedirs(save_path)
data = pd.read_excel(r"D:\01bachelor\sk04paper\SamplePoints\400经纬度.xlsx",index_col = 0,usecols="A:C")
def Scrap_img():
#使用for循环遍历出每个location坐标
for i in range(400):
#获取采样点经纬度
location_number = str(data.iloc[i][0])+','+str(data.iloc[i][1])
#水平角度获取4个方向的照片
for j in range(4):
#旋转的角度
#[0,1,2,3] * 90 = [0,90,180,270]
heading_number = str(90*j)
url = r"https://api.map.baidu.com/panorama/v2?" \
"&width=1024&height=512" \
"&location="+location_number+\
"&heading="+heading_number+ \
"&ak=" + ak
#文件保存名称
save_name =str(i)+"."+str(j)+".jpg"
print(url)
#打开网页
rep = urllib.request.urlopen(url)
#将图片存入本地,创建一个save_name的文件,wb为写入
f = open(save_path+save_name,'wb')
#写入图片
f.write(rep.read())
f.close()
print('图片保存成功')
def Cheak_img():
#遍历文件夹中的图片
for im in os.listdir(save_path):
#获取图片绝对路径
file_path = os.path.abspath("im")
#计算图片占用内存
im_occupy = os.path.getsize(os.path.join(save_path,im))
if im_occupy < 100:
os.rename(os.path.join(save_path,im),os.path.join(save_path,'No_found'+im))
Scrap_img()
Cheak_img()
2022.1.31更新
目前关于街景影像的研究数据源用谷歌的比较多,国内数据源只有百度和腾讯有街景影像服务(香港地区有谷歌影像),而且感觉现在街景服务并没有给两个公司带来太多的应用方向,所以数据更新速度和质量都不太ok,我在北京6环内的地区找了2000个点,很多点都没有或者影像不全,四个方向(前后左右)齐全的比较少,并且百度全景在天顶方向只有俯视角度的影像(0-90°),俯视角度影像大概只有25%左右(个人感觉,不知道具体数值准不准),下面提供给大家俯视45°的街景爬取代码,代码基本没变,就在url中加了点东西,方便大家使用直接完整的代码给大家:
import urllib.request #打开网页模块
import urllib.parse #转码模块
import pandas as pd
import os
import requests
#这里的路径可替换为自己保存文件夹的路径
save_path = r'D:\01bachelor\sk04paper\bdSVI/'
ak = "Lvgt7yw6mGCklShvUFzzss3i4fSqOEQu"
#判断文件夹是否存在,若不存在则创建
if not os.path.exists(save_path):
os.makedirs(save_path)
data = pd.read_excel(r"D:\01bachelor\sk04paper\SamplePoints\经纬度2000.xlsx",index_col = 0,usecols="A:C")
def Scrap_img():
#使用for循环遍历出每个location坐标
for i in range(2000):
#获取采样点经纬度
location_number = str(data.iloc[i][0])+','+str(data.iloc[i][1])
#水平角度获取4个方向的照片
for j in range(4):
#旋转的角度
#[0,1,2,3] * 90 = [0,90,180,270]
heading_number = str(90*j)
url = r"https://api.map.baidu.com/panorama/v2?" \
"&width=1024&height=512" \
"&location="+location_number+\
"&heading="+heading_number+ \
"&pitch="+str(45)+ \
"fov="+str(90)+ \
"&ak=" + ak
#文件保存名称
save_name =str(i)+"."+str(j+4)+"_"+location_number+".jpg"
print(url)
#打开网页
rep = urllib.request.urlopen(url)
#将图片存入本地,创建一个save_name的文件,wb为写入
f = open(save_path+save_name,'wb')
#写入图片
f.write(rep.read())
f.close()
print('图片保存成功')
def Cheak_img():
#遍历文件夹中的图片
for im in os.listdir(save_path):
#获取图片绝对路径
file_path = os.path.abspath("im")
#计算图片占用内存
im_occupy = os.path.getsize(os.path.join(save_path,im))
if im_occupy < 150:
os.rename(os.path.join(save_path,im),os.path.join(save_path,'No_found'+im))
Scrap_img()
Cheak_img()