Python爬虫实战(十三)Post请求中Payload处理分析—以某素材分享网为例

前情回顾:知网Post请求实战

在上篇博客中,我们分享了一个基础的Post请求爬虫。实际上,Post请求一般传入的都是Form data式的数据,本次分享一个Post请求为request load形式的爬虫案例~

网站地址:某素材网站

一、爬虫分析

抓取字段:标题、尺寸、大小、格式、使用量、收藏量
经过简单抓包可知,右侧红框中则包含我们所需要的信息
在这里插入图片描述

我们来分析它的POST请求,发现传入的数据形式是request payload

在这里插入图片描述

此时,如果直接传入数据字典,返回数据的是为空的,如下图所示(注意:headers中需要传入x-csrf-token字段及cookie字段

在这里插入图片描述

原因在于:开发者为方便阅读,使用了JSON序列化,请求头中的【content-type: application/json】也印证了这一点

解决方法:将传入数据转为json即可,如下图所示
在这里插入图片描述

二、全部代码

import requests
import json
import pandas as pd
from jsonpath import jsonpath
url = 'https://www.heycan.com/api/materialInfo'

params = {"item_id_list":["7005133042142465311"],"pre_item_type":4}

def get_reponse(url,params):
    
    headers = {
        'authority': 'www.heycan.com',
        'method': 'POST',
        'path': '/api/materialInfo',
        'scheme': 'https',
        'content-type': 'application/json',
        'origin': 'https://www.heycan.com',
        'referer': 'https://www.heycan.com/materialDetail?item_id=7005133042142465311&from=personal_page&width=720&height=1280',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
        'cookie': 'csrfToken=abalGrijwUtgehoA6ShdrPCD; s_v_web_id=verify_kuaurt73_zXaCAqEj_pEpR_4OQv_9D9Q_0YK9xKCKaiMB; MONITOR_WEB_ID=cd5c4073-b5b1-4fd7-8c46-c6252bbaa7dc',
        'x-csrf-token': 'abalGrijwUtgehoA6ShdrPCD'
    }
    r = requests.post(url,headers=headers,data=json.dumps(params))
    json_data = json.loads(r.text)
    return json_data

def parse_inf(json_data):
    title = jsonpath(json_data,'$..item_list[*].common_data.title')
    width = jsonpath(json_data,'$..item_list[*].common_data.icon.width')
    height = jsonpath(json_data,'$..item_list[*].common_data.icon.height')
    favorite_num = jsonpath(json_data,'$..item_list[*].statistics.favorite_num')
    usage_num = jsonpath(json_data,'$..item_list[*].statistics.usage_num')
    video_size_type = jsonpath(json_data,'$..item_list[*].video.video_size_type')

    inf_data = pd.DataFrame({
        'title':title,
        'width':width,
        'height':height,
        'favorite_num':favorite_num,
        'usage_num':usage_num,
        'video_size_type':video_size_type
    })
    
    return inf_data

json_data = get_reponse(url,params)
parse_inf(json_data)

在这里插入图片描述

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Python爬虫POST请求payload是指在向服务器发送POST请求时,需要传递的数据。这些数据通常是以字典的形式存储在payload,然后通过requests库的post方法发送给服务器。例如: ``` import requests payload = {'username': 'admin', 'password': '123456'} response = requests.post('http://www.example.com/login', data=payload) print(response.text) ``` 在上面的代码,我们定义了一个payload字典,其包含了用户名和密码。然后使用requests库的post方法向'http://www.example.com/login'发送POST请求,并将payload作为参数传递给data参数。最后,我们可以通过response.text获取服务器返回的响应内容。 需要注意的是,payload的数据格式需要根据服务器的要求进行设置,有些服务器可能需要将数据以JSON格式传递,这时候可以使用json参数代替data参数。例如: ``` import requests payload = {'username': 'admin', 'password': '123456'} response = requests.post('http://www.example.com/login', json=payload) print(response.text) ``` 在这个例子,我们将payload以JSON格式传递给服务器。这时候需要注意的是,使用json参数时,requests库会自动将payload转换为JSON格式,并设置Content-Type为application/json。 ### 回答2: Python爬虫是一种快速抓取网站数据的方法。在爬取数据时,常常需要使用POST请求来提交数据给目标服务器。在使用POST请求时,会经常涉及到payload参数。 Payload通常是指在HTTP请求,包含的数据信息。例如,在POST请求payload是要提交的数据。因此,了解Python爬虫如何使用POST请求payload参数非常重要。 在Python使用POST请求时,可以通过requests库来实现。requests库是Python最常用的HTTP客户端库之一。下面是使用requests库实现POST请求的基本代码: ```python import requests url = "http://www.example.com" payload = {"key1": "value1", "key2": "value2"} headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} response = requests.post(url, data=payload, headers=headers) print(response.text) ``` 从上述代码可以看出,使用requests库发送POST请求的基本步骤如下: 1. 设置需要访问的目标URL。 2. 设置要提交的payload数据。 3. 设置请求的Headers,包括User-Agent等信息。 4. 使用requests库发送POST请求,并获取响应数据。 对于payload参数的设置,主要需要注意以下几点: 1. payload参数必须是字典类型。 2. 接口文档可能会给出需要提交的参数字段名,要根据接口文档进行设置。 3. 如果需要提交的参数比较多,可以将多个参数封装到字典。 4. 如果有特殊字符或文,需要对payload参数进行编码。 总之,了解Python爬虫如何使用POST请求payload参数,可以让我们更加灵活自如地进行数据爬取。当然,在使用POST请求时,还需要注意反爬虫策略等相关问题,以免被网站封IP或其他限制。 ### 回答3: 在Python爬虫POST请求一般用于向服务器提交数据,常用于完成表单提交的操作。为了进行POST请求,需要使用payload(负载)来携带所需的数据。在Python,可以使用requests库来发送POST请求,并设置payload参数。 payload是一个字典类型的数据,key-value对应着POST请求所需的参数。根据实际情况,可以设置不同的payload,以满足请求参数的不同需求。例如: ```python import requests # 设置提交数据 payload = {'username': 'admin', 'password': '123456'} # 发送POST请求 response = requests.post('http://www.example.com/login', data=payload) # 获取响应结果 print(response.text) ``` 以上代码payload为一个字典类型的数据,里面包含了两个键值对,即username和password。然后使用requests.post函数来发送POST请求,并通过data参数设置payload的值。最后,获取服务器响应结果,即可获得登录成功或失败的信息。 需要注意的是,在使用POST请求时,需要根据服务器要求设置请求的Content-Type参数。如果服务器要求提交的数据类型为JSON,则需要设置Content-Type为application/json,如果服务器要求提交的数据类型为表单,则需要设置Content-Type为application/x-www-form-urlencoded。具体应根据实际情况进行设置。 另外,对于一些比较复杂的POST请求,如需要上传文件等,需要在设置payload时根据任务需求设置更多的参数,以保证请求的正常执行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值