通过百度地图开发者文档,获取行政区划区域检索接口:
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即为所要得到的总条目数据
获取全国省会城市列表,并对三巨头名称(肯德基、麦当劳、德克士)循环组合url,爬取数据,整理表格,结果如下:
1)在BDP中对三大快餐品牌门店的分布密度进行可视化展示,结果如下: 2)针对德克士相比较其他两个品牌的占比分布展示如下:
参考博客https://blog.csdn.net/angela_0612/article/details/80405179得知是csv文件编码的问题,因此重新保存该csv文件,修改其编码为uft-8,再次读取即可。
代码如下:
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”:“当前并发量已经超过约定并发配额,限制访问”} 怀疑是爬取受到了限制,加了header跟休眠时间,可以选择把休眠时间拉长一些,如5或8,效果会好一些。