在基于requests模块爬数据时,如果出现post请求中的数据为json格式的数据,可以使用两种方式来正确发送请求

  • import json模块,将需要传递的数据有json格式转换成字典类型,然后在调用requests.post()方法时,调用json模块的.dumps()方法完成json格式的数据发送,即response = requests.post(url=url, headers=headers, data=json.dumps(data))
  • 直接使用requests模块post方法,但是其中的参数不是data,而是json,给名叫json的参数传入json类型的值,此方式不需要引入json模块,即response = requests.post(url=url, headers=headers, json=json)

案例

在爬取荣耀商城门店信息的时候,发送的post请求为json类型的数据
在这里插入图片描述

方式1:

将json格式的数据转换成字典类型的数据,调用json.dumps()方法完成传递

import requests
import json
url = 'https://openapi.vmall.com/mcp/offlineshop/getShopList'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
# 将json类型的数据转换成字典类型的数据
data = {
"portal":2,"lang":"zh-CN","country":"CN","brand":1,"province":"山西","city":"太原","pageNo":1,"pageSize":20
}

# 调用json.dumps()方法,将数据以json格式传递
response = requests.post(url=url, headers=headers, data=json.dumps(data))
page_text = response.text

print(page_text)
方式2:

直接使用post方法,给参数json传入json类型的数据

import requests

url = 'https://openapi.vmall.com/mcp/offlineshop/getShopList'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
json = {"portal":2,"lang":"zh-CN","country":"CN","brand":1,"province":"山西","city":"太原","pageNo":1,"pageSize":20}

# 直接给post方法中的json参数赋值,赋json类型的数据
response = requests.post(url=url, headers=headers, json=json)
page_text = response.text

print(page_text)
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐