python-爬取地理坐标
时间:2022-07-25
本文章向大家介绍python-爬取地理坐标,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
爬取地理坐标
概述
目标网址:百度地图 使用到的技术其实是百度地图提供的开发者工具,没有暴力的东西,总体来说比较规范,唯一感觉到奇怪的是,在我进行调用接口的时候,我电脑的网老是断开,感觉好像是被所里的防火墙给整了,但是感觉不应该啊,这也不是违规操作。
流程
- 申请百度账号 此部分略略略
- 申请成为百度开发者 略略略
- 获得百度秘钥 进入开发者控制台,选择应用管理,建立应用,应用名称随便取一个,类型根据需要来进行,我这里选择的是服务器类型,下面的服务看着来,最主要的是地理编码和逆地理编码
再往下为校验方式的选择,一开始我选择的是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
- 当前所有源码链接
- Python入门基础连载(4)控制流
- 济西站构建大数据运营网络,打造智能化列车加工厂
- 五位数终端收购的域名dongxiao.cn已启用
- 全球互联网发展进入“拐点”——展望下一代互联网
- 2 分钟论文:语音生成表情包背后的技术原理
- 享学课堂谈-Python程序员的常见错误
- 区块链技术,如何提升网络安全?
- 趣店推“大白汽车”业务 启用域名dabaiqiche.com
- 糖果吃了那么多,你真的知道比特币分叉是咋回事吗?
- 静息态网络拓扑传输认知任务信息
- MYSQL字符串截取总结:LEFT、RIGHT、SUBSTRING、SUBSTRING
- 如何用Python提取中文关键词?
- 工信部:将加大网络提速降费力度加快百兆宽带普及
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel使用模型实现like模糊查询的例子
- Laravel 模型使用软删除-左连接查询-表起别名示例
- PHP上传图片到数据库并显示的实例代码
- Laravel 5.5 实现禁用用户注册示例
- 解决php用mysql方式连接数据库出现Deprecated报错问题
- Laravel自动生成UUID,从建表到使用详解
- Python中Selenium库使用教程详解
- 浅谈laravel aliases别名的原理
- Yii2框架中一些折磨人的坑
- php获取是星期几的的一些常用姿势
- laravel 实现用户登录注销并限制功能
- PHP Swoole异步Redis客户端实现方法示例
- PHP全局使用Laravel辅助函数dd
- 在laravel中实现ORM模型使用第二个数据库设置
- laravel5.1 ajax post 传值_token示例