昨晚上公司完会,酒喝多了,状态不好,睡得早,今天也醒得早,就把本该昨天写的补上了。
上周的时候突然收到一个很久很久很久没有联系的丹露同事发来一条打招呼的消息,我第一反应就是,又要我干苦力了。不过结果要求比我想象中要轻松很多,需求大概是:要做一个成都市的酒吧地图分布标记,直接从地图上搜索出来数量很少,需要把地图上能搜索到的都标记出来。
于是我想到了很久很久以前做过的一件事情,把全国所有城市的烟酒店爬取了一遍,只需要稍微改一改就可以拿来用了。过程中最困难的问题是,怎么找到以前的文档,怎么才能读懂那一串不规范的代码,经过比一点点多一点的时间,终于还是搞定了,下面就是这个过程,记录一下,以后应该就不用到处去找了。
需要用到的工具:
1.Python
2.高度地图开放平台
3.MongoDB
开始...
【注册一个高德key】
这个key可以用来做很多事情,首先需要把高德所有的省市区信息爬取下来,这个是另一个工作了,这里不介绍,下次有缘再说。
【城市数据准备】
大概就是这种,放到CSV或者Excel文档里面就可以了,精确到区县一级。
【代码】
import osos.chdir(r'F:\Python\新经销')import requestsimport pandas as pdfrom pymongo import MongoClientimport timeclass Location(object): def __init__(self, keyword=f'酒吧'): self.keyword = keyword self.key = 'key' # 你申请的高德地图API key self.url = 'https://restapi.amap.com/v3/place/text?keywords={}&city={}&' \ 'output=json&offset=20&page={}&key={}&extensions=all' self.data = pd.read_csv('city.csv') client = MongoClient(host='localhost', port=27017) db = client.Amap self.col = db.Store def get_location_data(self): for index, row in self.data.iterrows(): page = 1 while 1: url = self.url.format(self.keyword, row['name'], page, self.key) try: res = requests.get(url) except: try: time.sleep(15) res = requests.get(url) except: time.sleep(15) res = requests.get(url) if int(res.json()['count']) > 0: pois = res.json()['pois'] if len(pois) > 0: self.col.insert_many(pois) print('成功爬取并保存城市:{}第{}页的数据!'.format(row['name'], page)) time.sleep(0.1) page += 1 else: print('城市:{}第{}页无数据!{}'.format(row['name'], page,self.keyword)) time.sleep(3) breakif __name__ == '__main__': loc = Location(f'酒吧') loc.get_location_data()
结果会保存到MongoDB里面,大概是这样↓
【保存Excel】
MongoDB里面的格式不是标准的表格格式,还需要转换成标准的表格格式,再把多余的字段给摈弃了。操作如下↓
import pymongoimport pandas as pdimport osos.chdir(r'F:\Python\新经销')# 连接数据库client = pymongo.MongoClient('localhost', 27017)db = client['Amap']table = db['Store']# 读取数据data = pd.DataFrame(list(table.find()))# 选择需要显示的字段data = data[['id','name','address', 'adname','cityname','pname','location','type','tel','timestamp']]lonlat = data['location'].str.split(",",n=2,expand=True)data['lon'] = lonlat[0]data['lat'] = lonlat[1]data.drop_duplicates(subset=['name','location'],inplace=True)data.to_excel('成都酒吧.xlsx',index=False)
于是就得到了我们想要的Excel↓
【生成地图】
最后只需要把我们的数据导入高德开发平台就行了。
有很多样式可以设定,根据自己需求来就行了。
End
◆ 统计_集中和离散趋势 ◆ Python拼音 ◆ Excel时间序列预测函数