百度街景自动爬取,并自动检测没有影像的位置

       今天百度街景的权限申请成功了,所以就试了下之前找到的一个爬取街景的代码,我把原作者导入数据时文件格式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()

你可能感兴趣的:(python)