根据经纬度来爬取附近商家信息,保存在经纬度命名的csv文件中,方便后续导入pandas做数据清洗、分析。
import requests
import json
import time
import csv
def restapi(url,latitude,longitude):
res_list = []
res = requests.get(url)
if res.status_code == 200:
json_data = json.loads(res.text)
for context in json_data:
name = context['name'] #店铺名称
month_sales = context['recent_order_num'] #月销量
order_lead_time = context['order_lead_time'] #平均配送时间
tip = context['description'] #简介
phone = context['phone'] #电话
classification = context['flavors'][0]['name'] #类型
rate = context['rating'] #评分
address = context['address'] #地址
res_latitude = context['latitude'] #经度
res_longitude = context['longitude'] #纬度
data = {'店铺名称': name,
'月销量': month_sales,
'平均配送时间': order_lead_time,
'简介': tip,
'电话': phone,
'类型': classification,
'评分': rate,
'地址':address,
'经度':res_latitude,
'纬度':res_longitude,}
res_list.append(data)
headers = ['店铺名称', '月销量', '平均配送时间', '简介', '电话', '类型', '评分', '地址','经度','纬度', ]
with open('c:/1/%s,%s.csv'%(latitude,longitude), 'w') as f: #结果保存在根据经纬度命名的csv文件中
f_csv = csv.DictWriter(f, headers)
f_csv.writeheader()
f_csv.writerows(res_list)
else:
time.sleep(10)
for x in range(47065,49999,106):
for y in range(46090,49999,751):
latitude = '29.' + str(x) #拼接生成经度
longitude = '106.' + str(y) #拼接生成纬度
url = 'https://www.ele.me/restapi/shopping/restaurants?extras[]=activities&geohash=ws101hcw982&latitude=%s&limit=30&longitude=%s&offset=0&terminal=web'%(latitude,longitude)
restapi(url,latitude,longitude)
print(url)
time.sleep(5)