第一步:进入百度地图开放平台->开发文档->web服务API
http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5
第二步:获取密匙(一般都需要用,按照要求注册就行)
第三步:找到所需API的帮助文档,若要获取POI数据,可以点击左方“”地点检索“->服务文档。里面包括调用API的url格式,请求参数和返回参数
第四步:在python里面利用一般爬虫方法爬取该url即可
python爬虫所用的库很多,我一般以request库为主,结合json库进行数据处理。
json主要使用的函数:json.loads() 功能:str类型转化成dict类型的数据
json.dumps() 功能:dict类型数据转化为str类型的数据
转化为dict之后可以用["xx"]的方式对元素进行提取,十分方便。
但是有的时候数据无法转换成json类型,对于提取出来的数据就需要用正则表达式提取了
利用函数 re.search('正则表达式','被提取文本').group()可以直接提取出所需要的内容
贴一段调用圆形区域的具体代码
# -*- coding: utf-8 -*-
import requests
import pandas as pd
from pandas import DataFrame
import numpy as np
import re
URL="http://api.map.baidu.com/place/v2/search?"
query="query=银行"
radius="&radius=5000"
output="&output=xml"
AK="&ak=LXxfpyfvzhpeYNdV4t1A2H4wTfUYrplk"
data=pd.read_excel(r"C:\Users\User\Desktop\毕业设计\stata\community.xlsx")
com_lon=np.array(data['lon'])
com_lat=np.array(data['lat'])
poi_name=[]
poi_address=[]
poi_lon=[]
poi_lat=[]
poi_amount=[]
for i in range(0,(len(com_lon)-1)):
lon=com_lon[i]
lat=com_lat[i]
location="&location="+str(lat)+","+str(lon)
url=URL+query+location+radius+output+AK
response=requests.get(url)
if re.findall(r'(?<=)(.+?)(?= )',response.text) is None:
poi_name.insert(i,0)
poi_address.insert(i,0)
poi_lon.insert(i,0)
poi_lat.insert(i,0)
poi_amount.insert(i,0)
else:
poi_name.insert(i,re.findall(r'(?<=)(.+?)(?= )',response.text))
poi_address.insert(i,re.findall(r'(?<=)(.+?)(?=)',response.text))
poi_lon.insert(i,re.findall(r'(?<=)(.+?)(?= )',response.text))
poi_lat.insert(i,re.findall(r'(?<=)(.+?)(?= )',response.text))
poi_amount.insert(i,re.findall(r'(?<=)(.+?)(?= )',response.text))
df=pd.DataFrame({'name':poi_name,'address':poi_address,'lon':poi_lon,'lat':poi_lat,'amount':poi_amount})
df.to_excel(r"C:\Users\User\Desktop\毕业设计\stata\POI\bank.xlsx")