前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python-爬取地理坐标

python-爬取地理坐标

作者头像
火星娃统计
发布2020-09-15 16:01:37
1.7K0
发布2020-09-15 16:01:37
举报
文章被收录于专栏:火星娃统计火星娃统计

爬取地理坐标

概述

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

流程

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

再往下为校验方式的选择,一开始我选择的是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版本。

代码部分

代码语言:javascript
复制
# -*- 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬取地理坐标
    • 概述
      • 流程
        • 代码部分
          • 结果
            • 结束语
            相关产品与服务
            云开发 CLI 工具
            云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档