通过爬取百度地图数据获取全国各省会城市快餐三巨头数目

1、分析百度地图开放平台API

通过百度地图开发者文档,获取行政区划区域检索接口:

http://api.map.baidu.com/place/v2/search?query=ATM机&tag=银行®ion=北京&output=json&ak=您的ak //GET请求

根据这次实验对象,代码调整为:

http://api.map.baidu.com/place/v2/search?query=麦当劳&tag=美食®ion=北京&output=json&ak=您的ak

返回的json如下:

{
“status”:0,
“message”:“ok”,
“results”:[
{
“name”:“麦当劳(杨闸餐厅)”,
“location”:{
“lat”:39.917074,
“lng”:116.603877
},
“address”:“朝阳路朗廷大厦1层”,
“province”:“北京市”,
“city”:“北京市”,
“area”:“朝阳区”,
“street_id”:“6f5b544ffc75c6f68c55ecc3”,
“telephone”:"(010)65735002",
“detail”:1,
“uid”:“6f5b544ffc75c6f68c55ecc3”
},
……
]
}

为了获取数目信息,添加&page_num=0参数,为减少爬取条数,设置参数&page_size=1, 即返回总条目信息:

http://api.map.baidu.com/place/v2/search?query=麦当劳&tag=美食®ion=北京&output=json&page_size=1&page_num=0&ak=您的ak

{
“status”:0,
“message”:“ok”,
“total”:295,
“results”:[
{
“name”:“麦当劳(杨闸餐厅)”,
“location”:{
“lat”:39.917074,
“lng”:116.603877
},
“address”:“朝阳路朗廷大厦1层”,
“province”:“北京市”,
“city”:“北京市”,
“area”:“朝阳区”,
“street_id”:“6f5b544ffc75c6f68c55ecc3”,
“telephone”:"(010)65735002",
“detail”:1,
“uid”:“6f5b544ffc75c6f68c55ecc3”
}
]
}

total即为所要得到的总条目数据

2、爬取数据

获取全国省会城市列表,并对三巨头名称(肯德基、麦当劳、德克士)循环组合url,爬取数据,整理表格,结果如下:
通过爬取百度地图数据获取全国各省会城市快餐三巨头数目_第1张图片

3、分析数据并可视化

1)在BDP中对三大快餐品牌门店的分布密度进行可视化展示,结果如下:
通过爬取百度地图数据获取全国各省会城市快餐三巨头数目_第2张图片
2)针对德克士相比较其他两个品牌的占比分布展示如下:
通过爬取百度地图数据获取全国各省会城市快餐三巨头数目_第3张图片

4、遇到问题

1)使用pandas读取本地csv城市列表时报错error:UnicodeDecodeError: ‘utf-8’ code can’t decode byte 0xa1 in position 0

参考博客https://blog.csdn.net/angela_0612/article/details/80405179得知是csv文件编码的问题,因此重新保存该csv文件,修改其编码为uft-8,再次读取即可。

2)读取爬到的total数据时报错“KeyError: ‘total’”

代码如下:

text = requests.get(url, headers=headers).text
num = json.loads(text)['total']
print(num)

参考博客https://blog.csdn.net/August1226/article/details/80654911原因是数据中没有“total”这个标签。
利用dict内置的get(key,default)方法,如果key存在,则返回其value,否则返回default;使用这个方法永远不会触发Key Error.调试发现返回了很多None值。
但是返回的json文件中明明有total字段,因此单独调试,循环抓取同一条url:

while(1):
    text = requests.get(url).text
    print(text)

结果出现许多{“status”:401,“message”:“当前并发量已经超过约定并发配额,限制访问”}
通过爬取百度地图数据获取全国各省会城市快餐三巨头数目_第4张图片
怀疑是爬取受到了限制,加了header跟休眠时间,可以选择把休眠时间拉长一些,如5或8,效果会好一些。

你可能感兴趣的:(空间数据分析,数据,可视化,百度地图)