python

您所在的位置:网站首页 python爬取地图上的经纬度 python

python

2023-01-02 15:10| 来源: 网络整理| 查看: 265

爬取地理坐标概述

目标网址:百度地图 使用到的技术其实是百度地图提供的开发者工具,没有暴力的东西,总体来说比较规范,唯一感觉到奇怪的是,在我进行调用接口的时候,我电脑的网老是断开,感觉好像是被所里的防火墙给整了,但是感觉不应该啊,这也不是违规操作。

流程申请百度账号 此部分略略略申请成为百度开发者 略略略获得百度秘钥 进入开发者控制台,选择应用管理,建立应用,应用名称随便取一个,类型根据需要来进行,我这里选择的是服务器类型,下面的服务看着来,最主要的是地理编码和逆地理编码

再往下为校验方式的选择,一开始我选择的是ip白名单,后来想想我要是换个ip不就不行了吗?所以采用了sn校验方法。

在这一步需要记住的是你的开发者ak和sk。代码部分我去掉了这个秘钥 4. 进行请求

请求的话围绕着这个网址进行 下一步爬虫需要更改的是

address部分ak部分GET请求部分,为sn

http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求

注意:当前为V3.0版本接口文档,V2.0及以前版本自2019.6.18起新用户无法使用。老用户仍可继续使用V2.0及以前版本请求实现逆地理编码服务,为保障用户体验,建议您尽快迁移到V3.0版本。

代码部分# -*- coding: utf-8 -*- import urllib.request, urllib.parse, urllib.error import json import hashlib import csv # 输出格式为json output = 'json' # 开发者平台获取的ak ak = '*****************' #开发者平台获取的sk sk='******************' # 目标地理位置,这里可以外部导入 a=['北京','首都医科大学','天坛医院','天通苑','德州','杭州','上海','北京大学','天津'] # 打开保存位置 csv_obj = open('./python/爬取地理坐标/data.csv', 'w',newline='', encoding="utf-8") #写入title csv.writer(csv_obj).writerow(["位置","lng","lat"]) # 进行爬取 for i in a: queryStr = '/geocoding/v3/?address={}&output=json&ak={}'.format(i,ak) #进行转码,safe为不转码的部分 encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]") # 添加sk rawStr = encodedStr + sk # 算sn值,用于调用百度接口 # 这里可以参看官方文档 sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest()) # 拼接url url = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]") # 目标请求 req = urllib.request.urlopen(url) # 进行解码 res = req.read().decode() # json转换为字典 temp = json.loads(res) # 提取经度和纬度 lng,lat=temp['result']['location']['lng'],temp['result']['location']['lat'] # 写入csv文件 csv.writer(csv_obj).writerow([i,lng,lat]) # 关闭csv文件 csv_obj.close()结果

小范围运行没有出现问题,后续准备进行大样本的计算。 百度爸爸真好。不然得一个个输地点

结束语

关于更新,现在做不到日更了,只能随缘更新

love&peace



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3