爬取美团店铺数据(二)—— getPoiList接口调用

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请说明出处。 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接口的调用过程已经详细讲解完毕,如果你觉得笔者写得还不错,还请点个赞!

猜你喜欢

转载自blog.csdn.net/jackandsnow/article/details/89358032