0%

Python post方法提交json数据

刚接触爬虫的程序员可能会遇到不会提交json数据的问题,本文以Python示例来说明如何提交。

  • 案例网址
    https://www.retailmenot.com/coupons/food

抓包查看异步请求的地址

  • AJAX_URL:https://www.retailmenot.com/rmnql/
    Request_Payoad (json格式数据),看下图
    json数据

  • 返回的Response
    在这里插入图片描述

  • 复制原数据到Pycharm
    copy_data

    格式化代码

  • Pycharm中默认格式化代码快捷键为Ctrl+Alt+L,但是与QQ快捷键冲突,可关闭QQ或者自行更改快捷键

    1
    data = {"operationName":"loginData","variables":{},"query":"query loginData {\n  isLoggedIn\n  authenticatedUser {\n    username\n    email\n    photo\n    __typename\n  }\n}\n"},{"operationName":"getUserInfo","variables":{},"query":"query getUserInfo {\n  authenticatedUser {\n    username\n    email\n    photo\n    __typename\n  }\n}\n"}

    格式化代码

    json方式提交数据

    两种方式提交数据 说明
    data=json.dumps(data) 使用json模块中的dumps方法转成json数据在提交
    json=data 直接以requests的json参数提交数据

示例代码

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    """
    Created on 2020年1月11日
    @author: 包子
    @site: http://www.wxiptest.com
    @email: 2775617031@qq.com
    """
    import json, requests

    # pycharm格式化代码快捷键 Ctrl+Alt+L (此快捷键与QQ快捷键冲突 自行设置)
    # 要提交的json格式数据

    data = {
    "operationName": "loginData",
    "variables": {},
    "query": "query loginData {\n isLoggedIn\n authenticatedUser {\n username\n email\n photo\n __typename\n }\n}\n"}, {
    "operationName": "getUserInfo", "variables": {},
    "query": "query getUserInfo {\n authenticatedUser {\n username\n email\n photo\n __typename\n }\n}\n"
    }

    headers = {
    # 需携带origin 否者无法请求成功: 服务器会校验当前的请求是不是来自被允许的站点 就是通过Origin字段的值来进行的判断
    'origin': 'https://www.retailmenot.com',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4000.3 Safari/537.36'
    }

    # 可使用json=data 或 data=json.dumps(data)
    res = requests.post('https://www.retailmenot.com/rmnql/', data=json.dumps(data), headers=headers).text
    print(res)
  • Pycharm返回结果
    结果