FME爬取百度POI数据

背景

百度提供了丰富的POI数据,有些场景下我们需要把这些数据放到内网环境下,这个时候就要想办法把数据爬下来。

学习准备

百度API接口学习

百度API提供了一个叫Place API获取poi的接口,有个城市内检索 实例为
http://api.map.baidu.com/place/v2/search?query=美食&page_size=10&page_num=0&scope=1&region=北京&output=json&ak={您的密钥}
它返回的是个json类型数据,一个区域最大返回数为400,每页最大返回数为20。显然一个城市内不管什么类别的poi,不可能只有400个,会遗漏数据,故舍去此方法。

还有一个矩形区域检索,实例为
http://api.map.baidu.com/place/v2/search?query=美食&page_size=10&page_num=0&scope=1&bounds=30.915,121.404,30.975,121.414&output=json&ak={您的密钥}
只要区域划分得当(相对小一点),就可以爬下想要的数据。

FME学习

Tiler函数 用来拆分爬取范围,相对
裁剪的参数越大区域越小
HTTPCaller 发出url请求
XMLFragmenter解析。

思路

使用百度的矩形区域检索方式爬取数据,因为单次最多只能爬取400条记录所以区域太大的话就进行分割,用分割后的区域发起爬取请求。
1,指定采集区域范围,根据座标范围大小以及POI专题的密集程度使用Tiler函数将区域拆分为很多个小区域,如爬取上海市的居民小区可考虑100×100的网格。
2,将切分后的网格传递给自定义的函数。函数传入参数:参见API接口参数,执行循环一次请求最大返回400条记录,分页为20条记录需要循环20次。函数内部实现了返回json数据的解析,所以输出的参数为需要爬取信息对应的字段。

操作截图

在这里插入图片描述
分割爬取区域,并获取区域座标范围值。

在这里插入图片描述
自定义循环函数,用于分割区域的poi数据的请求、分页获取、解析工作。

在这里插入图片描述
函数内部实现细节。

结果展示

在这里插入图片描述
以上内容实现了百度poi的爬取

注意点

有如下注意点:
1,抓取之前要弄清楚百度的关键词设置,保证抓取更精准
可以参考:http://lbsyun.baidu.com/index.php?title=lbscloud/poitags
2,抓取数据量比较大时考虑使用代理,不然ip会被百度封掉
3,普通key抓取量每天有限制好像是6000,可申请多个key轮流抓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章