百度地图爬取poi数据(圆形区域检索) 您所在的位置:网站首页 高德地图app画圆形区域 百度地图爬取poi数据(圆形区域检索)

百度地图爬取poi数据(圆形区域检索)

2023-08-01 01:41| 来源: 网络整理| 查看: 265

爬取百度地图poi数据

需要用到百度地图的“地点检索”服务,关于“地点检索”和ak的获取请看:百度地图开放平台的服务文档,文档很重要,要仔细看。 因为矩形区域检索是高级权限,不能直接用,所以我用的是圆形区域检索,覆盖地图的范围肯定是不够好的。“地点检索”这个服务给的配额上限是2000次/天(如果没充钱的话),并发值是2,所以一天要控制在这个范围内。之前网上也有说过有400条的限制,现在不是400条了,是100左右,所以用圆形区域检索的话注意半径别太大了,要不爬的就太少了。 我这半径设的是2000米,设定经纬度的范围是郑州部分地方,然后直接把爬下来的数据存到了MongoDB和csv文件中。根据需要自己修改这些值,拼接url然后爬就行了。 代码:

import requests import time from urllib.parse import urlencode import csv from pymongo import MongoClient import json client = MongoClient('mongodb://localhost:27017') db = client.Test stu=db.test2 pointlist = [] #要遍历的点 begin_lat = 34.52 #开始和结束的经纬度34.52 end_lat = 34.90 #34.90 begin_lon = 113.32 #113.32 end_lon = 114.0 #114.0 ak='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' headurl = 'http://api.map.baidu.com/place/v2/search?' query = '药店' x = int ((end_lat-begin_lat)/0.04 + 1) #经度和纬度分别遍历几次 y = int ((end_lon-begin_lon)/0.04 + 1) lat = begin_lat lon = begin_lon newpoint = str(lat)+','+str(lon) pointlist.append(newpoint) #存到列表里面 for i in range(x): for j in range(y): lon += 0.04 newpoint = str(lat)+','+str(lon) pointlist.append(newpoint) lon = begin_lon lat += 0.04 #print(pointlist) num = 1 ff = open('D:/药店.csv','w',encoding='utf-8',newline='') for i in pointlist: #遍历列表,每次取一个点,也就是圆心 url = headurl+'query='+query+'&location='+i+'&radius=2000&output=json&ak='+ak #拼接url #print(url) response = requests.get(url=url) data = response.json() print('data', num ,':','('+i+')') result = data['results'] if result: for j in range(len(result)): result_x=result[j] print(result_x) re = stu.insert_one(result_x) #写入数据库 w = csv.DictWriter(ff, result_x.keys()) w.writerow(result_x) else: print('NULL') time.sleep(1) num += 1 ff.close()

我这url没有设定page_size和page_num,这样爬下来的东西就比较少,可以看文档里的参数加上这俩参数,不过page_num一般到6就没有东西了。 代码很水,经纬度的划分也就是大概大概,爬的东西也不多,仅自己记录一下。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有