练习---爬取饿了么某POI地址附近的餐厅(不能自动登录版)

 这一章学的是带cookies登陆,本来想写入存储cookies,下次就可以自动登陆了,但是写失败了。

而且饿了么只支持手机验证码登录,我发验证码太频繁了已经被饿了么限制了嘤嘤嘤...

目前只能简单写一下输入手机号,发送验证码,登录(如果发送验证码失败就不能继续了,所以要保证手机号可用)。

另一个限制是我只能搜索固定一座城市的地址,在这里写的是广州。

总之是一个能运行但是功能不牛x的有瑕疵的代码。

希望以后吃透cookies和session后优化一下。

import requests,json

ses=requests.session()
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'}

tel_num=input('请输入您的手机号码:')

#发送验证码,获取token值
def get_code(tel_num):  
	url='https://h5.ele.me/restapi/eus/login/mobile_send_code'
	data={'captcha_hash':"",
		'captcha_value':"",
		'mobile':tel_num,
		'scf':"ms"}		
			
	send_code=ses.post(url,data=data,headers=headers)
	#print(send_code.text)如果成功的话可以获得一个{"validate_token":"xxx"}的字符串,需要将其转换成字典
	if('validate_token' in send_code.json()):
		print(send_code.json()['validate_token'])
		return send_code.json()['validate_token']
	else:
		print(send_code.json()['message'])
		return 0
		
def login_in():
	token=get_code(tel_num)
	if token==0:
		return 0
	else:
		code=input('请输入验证码:')
		url2='https://h5.ele.me/restapi/eus/login/login_by_mobile'
		data2={
			'mobile':tel_num,
			'scf':"ms",
			'validate_code':code,
			'validate_token':token}
		login=ses.post(url2,data=data2,headers=headers)
		print(login.status_code)
		return login.status_code
			

#搜索地址
def search_poi():
	add=input('输入你家地址:')
	url3='https://www.ele.me/restapi/bgs/poi/search_poi_nearby'
	params={
	'geohash':'ws0e96s8dv52',  #这里固定选择的是广州,目前我还不会选别的地方
	'keyword':add,
	'latitude':'23.12908',
	'limit':'20',
	'longitude':'113.264359',
	'type':'nearby'}
	res=ses.get(url3,params=params)
	#print(res.json())
	js_add=res.json()
	print('以下是与'+add+'相关的位置信息')
	n=0
	for a in js_add:
		print(str(n)+'.'+a['address'])
		n+=1
	add_num=int(input('请输入您选择位置的序号:'))
	address=js_add[add_num]
	print('你选择的是:'+address['address'])
	
	#选择地址后出现餐厅
	url4='https://www.ele.me/restapi/shopping/restaurants'
	params2={
	'extras[]':'activities',
	'geohash':address['geohash'],
	'latitude':address['latitude'],
	'limit':'24',
	'longitude':address['longitude'],
	'offset':'0',
	'terminal':'web'}
	res_res=ses.get(url4,params=params2)
	js_res=res_res.json()
	for r in js_res:
		print(r['name'])
		print('\n------------------------------------')

stat_code=login_in()
if stat_code==200:
	search_poi() #然后提取地址,让用户选择
else:
	print('出错啦:'+str(stat_code))

 

你可能感兴趣的:(爬虫学习)