版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请说明出处。 https://blog.csdn.net/jackandsnow/article/details/89358032
一、概述
继上一篇文章讲述解析和生成美团token之后,这篇文章主要讲述如何调用美团的getPoiList接口来获取返回json格式的店铺数据。getPoiList接口返回的数据如下图所示。
二、模拟浏览器请求
美团的数据经常会被人爬取,所以美团公司的反爬工作做得也是非常好,因此在调用接口时一定要模拟浏览器请求,具体模拟请求的参数如下:
simulateBrowserHeader = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'gz.meituan.com',
'Referer': 'https://gz.meituan.com/meishi/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
三、调整URL请求
细心的小伙伴会从浏览器的请求header中看到,URL请求中的特殊字符(如’/’, ‘:’, ‘+’, ‘=’)都使用了特殊字符串进行替换处理,比如下图中的’%3A’替换的就是’:’,’%2F’替换的就是’/’。
因此,这里需要编写一个简单的函数对URL请求中的特殊字符进行替换处理,具体的代码如下所示。关于’+‘和’='的替换值,可以通过URL中的_token与实际的_token值对比分析得知。
# 替换'/+=:'这几个特殊符号,用于URL请求调用
def str_replace(string):
return string.replace('/', '%2F') \
.replace('+', '%2B') \
.replace('=', '%3D') \
.replace(':', '%3A')
四、调用getPoiList接口
所有的预备工作都准备好之后,就是进行接口的调用了,虽然这个接口传入的参数很多,但是参数的命名都是清晰易懂的,所以就不对参数进行详细介绍了,直接上调用接口的代码吧。(关于里面生成token的代码,请点击这里)
if __name__ == '__main__':
cityName = '广州'
originUrl = str_replace('https://gz.meituan.com/meishi/c11/')
# 生成token
token_encode = encode_token()
token = str_replace(token_encode)
url = 'https://gz.meituan.com/meishi/api/poi/getPoiList?' \
'cityName=%s' \
'&cateId=11' \
'&areaId=0' \
'&sort=' \
'&dinnerCountAttrId=' \
'&page=1' \
'&userId=' \
'&uuid=05bf3db6-3c2f-41cd-a4ec-ed79ae0a9506' \
'&platform=1' \
'&partner=126' \
'&originUrl=%s' \
'&riskLevel=1' \
'&optimusCode=1' \
'&_token=%s' % (cityName, originUrl, token)
response = requests.get(url, headers=simulateBrowserHeader)
if response.status_code == 200:
data = response.json()['data']
with open('data.json', 'w') as f:
json.dump(data, f, ensure_ascii=False)
print('Save data into json file successfully!')
f.close()
if response.status_code == 403:
print('Access is denied by server!')
上述中URL请求中的参数除了cityName、originUrl、token可以修改外,还有cateId、page也是可以修改的,关于参数的动态调整在后续的讲述爬取分页数据的文章会详细介绍。这里把getPoiList接口返回的json数据就简单的保存为了json格式的文件(部分内容如下图所示),但在后续的文章中会讲述如何把它存到数据库中。
至此, 获取美团店铺数据的getPoiList接口的调用过程已经详细讲解完毕,如果你觉得笔者写得还不错,还请点个赞!