栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号