数据爬取实战——POI爬取及数据可视化
爬虫技术和GIS结合在一起可以碰撞出意想不到的火花,通过百度地图api/forlium/requests/wordcloud库可以爬取到感兴趣的POI数据,并直观地将其显示出来。本章通过requests库调用百度地图api爬取数据,并利用forlium库可视化数据,最后用wordcloud库统计出现频率最高的汉字,制作词云。
(1)调用百度地图api/requests库爬取POI数据
requests库是爬虫技术中常用的开源库,常用来对浏览器发起请求进行访问。百度地图api开发文档见http://lbs.baidu.com/index.php?title=webapi/guide/webservice-placeapi。在创建ak秘钥后,我们就可以调用百度api的接口爬取数据,我们可以通过网页接口来执行get请求,爬取数据,这里给出地点检索的相关接口。
具体代码方面,笔者采用了https://github.com/lbygg227/POI_GET的部分代码,感谢此人贡献的开源代码。代码主要使用了两种检索方法:1. 按行政区划检索POI,受到百度地图api的限制,最多开源读取20页数据,共计400条,所以这种方法比较适用于数量较小的POI爬取,不推荐在大的工程项目中使用。2. 按矩形框搜索,通过给出矩形框的左下角和右上角经纬度坐标,结合api进行爬取。
Method1
def method_region():
print("请输入所需要爬取数据的行政区划名称,如南京市,南京市鼓楼区等")
city=str(input())
print ('开始')
urls=[] #声明一个数组列表
for i in range(0,20):
page_num=str(i)
url='http://api.map.baidu.com/place/v2/search?query='+name+'®ion='+city+'&page_size=20&page_num='+str(page_num)+'&output=json&ak='+ak
urls.append(url)
print ('url列表读取完成')
for url in urls: