python爬取地理数据_python结合百度api进行地理编码和爬取POI点

最近一直比较忙老师让写一个时空大数据的申请项目书,我这脑子累成狗也不成啊,唉硬着头皮要上,今天偷点空闲一直想爬取百度地图的数据,一直也没做,今天主要爬取了POI点(北京四环以内的吃饭的地方)和利用python结合百度api进行地理编码的小程序,借鉴网上的大神写的,我python本身还不是够,做一些简单的小爬虫可以,仍然需要努力。关于百度api的ak申请打开下面的网址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi开始来代码

放两张图:

一、关于百度api的一些问题

1、应用类别要选择浏览器

2、Referer白名单:这里面写成通配符即可就是(*)单独一个*

二、调用百度地理编码的全部代码

import pandas as pd

import json

import csv

from urllib.request import urlopen, quote

import requests

#获取城市的地理编码

def getlnglat(address):

url = 'http://api.map.baidu.com/geocoder/v2/'

output = 'json'

ak = '你申请的AK'

add = quote(address) #由于本文城市变量为中文,为防止乱码,先用quote进行编码

uri = url + '?' + 'address=' + add + '&output=' + output + '&ak=' + ak

req = urlopen(uri)

res = req.read().decode() #将其他编码的字符串解码成unicode temp = json.loads(res) #对json数据进行解析 return temp

#print(req)

temp = json.loads(res) #对json数据进行解析

print(temp)

return temp

file = open(r'C:\Users\Administrator\Desktop\高校\point.json','w') #建立json数据文件

with open(r'C:\Users\Administrator\Desktop\高校\university.csv', 'r',encoding='UTF-8') as csvfile: #打开csv

reader = csv.reader(csvfile)

for line in reader: #读取csv里的数据 # 忽略第一行

if reader.line_num == 1: #由于第一行为变量名称,故忽略掉

continue # line是个list,取得所有需要的值

b = line[1].strip() #将第一列city读取出来并清除不需要字符

c= line[4].strip()#将第二列price读取出来并清除不需要字符

lng = getlnglat(b)['result']['location']['lng'] #采用构造的函数来获取经度

lat = getlnglat(b)['result']['location']['lat'] #获取纬度

str_temp = '{"count":' + str(b) +',"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(c) +'},'

print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上

file.write(str_temp) #写入文档

file.close() #保存

这个可以做一些热力图,聚合效果看你需要保存成一定的数据

三、爬取POI点数据

# -*- coding: utf-8 -*-

# Python 2.7

# 提取城市的POI点信息并将其保存至MongoDB数据库

import urllib.request as urllib2

import pandas as pd

import json

from urllib.request import urlopen, quote

left_bottom = [116.282387,39.835862]; # 设置区域左下角坐标(百度坐标系)

right_top = [116.497405,39.996569]; # 设置区域右上角坐标(百度坐标系)

part_n = 2; # 设置区域网格(2*2)

url0 = 'http://api.map.baidu.com/place/v2/search?';

x_item = (right_top[0]-left_bottom[0])/part_n;

y_item = (right_top[1]-left_bottom[1])/part_n;

query = quote('饭店'); #搜索关键词设置,转换中文

ak = '你申请的AK'#百度地图api信令

n = 0; # 切片计数器

file = open(r'C:\Users\Administrator\Desktop\高校\point.json','w') #建立json数据文件

for i in range(part_n):

for j in range(part_n):

left_bottom_part = [left_bottom[0]+i*x_item,left_bottom[1]+j*y_item]; # 切片的左下角坐标

right_top_part = [right_top[0]+i*x_item,right_top[1]+j*y_item]; # 切片的右上角坐标

for k in range(20):

url = url0 + 'query=' + query + '&page_size=20&page_num=' + str(k) + '&scope=1&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ','+str(right_top_part[1]) + ',' + str(right_top_part[0]) + '&output=json&ak=' + ak;

data = urllib2.urlopen(url);

hjson = json.loads(data.read());

if hjson['message'] == 'ok':

results = hjson['results'];

data=list(map(lambda m:(results[m]["name"],results[m]["address"],results[m]["location"]["lat"],results[m]["location"]["lng"]),range(len(results))))

data=pd.DataFrame(data);

data.to_csv('C:\\Users\\Administrator\\Desktop\\高校\\3.csv',header=False,index=False,mode='a+')

print(data)

n += 1;

print ('第'+str(n)+'个切片入库成功')

这个我存成csv当然你也可以存到数据库中

四、应用

改天更新。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值