在基于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)