百度api爬虫(1)从百度api中爬取地点数据

几句废话————

百度api就是基于百度地图的开发接口,这么大的地图公司居然给开发接口真的很感激哎!

所以,言归正传。现在项目需求要把乌鲁木齐市内的所有清真寺都用矢量圈出来,然后做点统计啥的,最后做个专题图产品。

怎么把清真寺找出来?

领导的意思是你一个一个上网搜吧,这就是你的工作量。那我当然要想办法啊,边工作边学习工作才有意义嘛!

然后就发现百度api可以实现我的需求。其实可以通过python爬虫自动化实现整个流程,但是我还不会python,只能先凑合一下,通过api返回乌鲁木齐的清真寺的json查询结果,json转excel,再从excel导入arcgis。这些点和他们的性质就可以作为我圈矢量的参考啦!

 

——————————正文分割线————————————

先上结果,最后成功把乌鲁木齐市所有能搜到的清真寺都以点的形式导入了arcgis。

百度api爬虫(1)从百度api中爬取地点数据_第1张图片

可以看到最终找到197个点,虽然还没对这些点进一步筛查,但已经很有用了。

第一步:注册称为百度开发者

参考文献一:如何获得poi点(points of interest):https://blog.csdn.net/WenWu_Both/article/details/70187605

1、申请一个百度开发者账号:http://lbsyun.baidu.com/,然后点控制台。

百度api爬虫(1)从百度api中爬取地点数据_第2张图片

2.get一个ak

ak也就是一个信令,作为你可以使用百度api的密码。这个东西后面要不断地用到。点创建应用,随便起个名字,选浏览器端,白名单输入*。

百度api爬虫(1)从百度api中爬取地点数据_第3张图片

至此,就拥有了一个ak。然后具体咋找poi(进行地点检索),一定要好好看官方文档:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi

3.在行政区范围内搜索。

网上的大神们都偏向用矩形检索,因为只能返回最多400个点,但是我这个poi没有那么多,我就用行政区检索就可以了。

还碰到一个问题,我输入了行政区的外接矩形边框,但是不知道为啥搜出来的点反而比实际少?(少一半呢!)以后解决吧

针对我用的这个根据行政区划检索的办法,提供一点小小的技巧。

对于任何一个区域,都可以先做一下行政区检索,如果最后记录没超过400条,就进行这样的检索就可以。

如果记录超过400(也就是page_size=20&page_num=20)还是满记录,那就要分矩形区域进行检索了。

我的检索是这样的,比官方的必填参数多了page_size=20&page_num=0

把这个填上自己的ak,然后输入浏览器网址那里,点回车,就能看到根据限制条件找到的搜索结果啦。

http://api.map.baidu.com/place/v2/search?query=%E6%B8%85%E7%9C%9F%E5%AF%BA®ion=%E4%B9%8C%E9%B2%81%E6%9C%A8%E9%BD%90&output=json&coord_type=1&page_size=20&page_num=9&ak=你的ak

对部分参数进行解释。具体解释参考百度官方:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi

 

参数名 参数含义 类型 示例 是否必须
query 检索关键字。行政区划区域检索不支持多关键字检索。
如果需要按POI分类进行检索,请将分类通过query参数进行设置,如query=美食
string(45) 天安门、美食 必选
tag 检索分类偏好,与q组合进行检索,多个分类以","分隔
(POI分类),如果需要严格按分类检索,请通过query参数设置
string(50) 美食 可选
region 检索行政区划区域(增加区域内数据召回权重,如需严格限制召回数据在区域内,请搭配使用city_limit参数),可输入行政区划名或对应cityCode string(50) 北京、131 必选
city_limit 区域数据召回限制,为true时,仅召回region对应区域内数据。 string(50) true、false 可选
output 输出格式为json或者xml string(50) json或xml 可选
scope 检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息 string(50) 1、2 可选
filter 检索过滤条件。当scope取值为2时,可以设置filter进行排序。

industry_type:行业类型,注意:设置该字段可提高检索速度和过滤精度,取值有: hotel(宾馆);cater(餐饮);life(生活娱乐) sort_name:排序字段,根据industry_type字段的值而定。 1、industry_type为hotel时,sort_name取值有: default(默认);price(价格);total_score(好评);level(星级);health_score(卫生);distance(距离排序,只有圆形区域检索有效) 2、industry_type为cater时,sort_name取值有: default(默认);taste_rating(口味);price(价格);overall_rating(好评);service_rating(服务);distance(距离排序,只有圆形区域检索有效) 3、industry_type为life时,sort_name取值有: default(默认);price(价格);overall_rating(好评);comment_num(服务);distance(距离排序,只有圆形区域检索有效)
sort_rule:排序规则:0(从高到低),1(从低到高)
price_section:价格区间
groupon:是否有团购:1(有),0(无)
discount:是否有打折:1(有),0(无)

string(50) sort_name:distance|sort_rule:1 可选
coord_type 坐标类型,1(wgs84ll即GPS经纬度),2(gcj02ll即国测局经纬度坐标),3(bd09ll即百度经纬度坐标),4(bd09mc即百度米制坐标)
注:"ll为小写LL"
坐标详细说明
int 1、2、3(默认)、4 可选
ret_coordtype 可选参数,添加后POI返回国测局经纬度坐标
坐标详细说明
string(50) gcj02ll 可选
page_size 单次召回POI数量,默认为10条记录,最大返回20条。多关键字检索时,返回的记录数为关键字个数*page_size。 int 10 可选
page_num 分页页码,默认为0,0代表第一页,1代表第二页,以此类推。

常与page_size搭配使用。

int 0、1、2 可选
ak 开发者的访问密钥,必填项。v2之前该属性为key。

申请密钥

string(50)   必选
sn 开发者的权限签名。

Sn校验说明

string(50)   可选,若开发者所用AK的校验方式为SN校验时该参数必须。
timestamp 设置sn后该值必填。 string(50)  

设置sn后该值必填。

 

 

"page_size=20"就是说每页返回20个地点,如果不设置,那就默认0。

这个记录出现以后,发现每页上只有20条,也没有翻页按钮,如何翻页呢

"page_num=0"其实是用来翻页的!想看第二页,就改成"page_size=20&page_num=1"。

然后下一篇讲一下如何把这些json结果转入excel。感兴趣的朋友移步:https://blog.csdn.net/weixin_43105618/article/details/90699543

不需要编程的方法,因为我暂时还不会编程o(╥﹏╥)o

 

你可能感兴趣的:(Webgis)