快手 某作者所有视频下载

# !/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: JHC000abc@gmail.com
@file: test_download.py
@time: 2024/7/5 14:54
@desc:

"""

from sdk.temp.temp_supports import IsSolution, DM
from sdk.utils.util_network import NetWorkRequests
from sdk.utils.util_encrypt import EncryptProcess


class Solution(IsSolution):
    def __init__(self, **kwargs):
        super(Solution, self).__init__()
        self.__dict__.update({k: v for k, v in [
            i for i in locals().values() if isinstance(i, dict)][0].items()})
        self.net = NetWorkRequests()
        self.encrypt = EncryptProcess()
        self.name_lis = []

    @DM.add_project()
    def mit(self, url, name, headers):
        """

        :param url:
        :param save_file:
        :return:
        """
        result = self.net.download_videos(url=url, headers=headers, file=f"videos/{name}.mp4", max_size=1024 * 100000)
        print(result)
        return result

    def process(self, **kwargs):
        """

        :param kwargs:
        :return:
        """

    def get_url(self, pcursor="", userId="3xs9sbmjg9hhtic"):
        """

        :param pcursor:
        :param userId:
        :return:
        """
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
            "content-type": "application/json",
        }
        cookies = {
            "did": "换成自己的",
            "userId": "换成自己的",
            "kuaishou.server.web_st": "换成自己的",
        }
        url = "https://www.kuaishou.com/graphql"
        data = {
            "variables": {
                "userId": f"{userId}",
                "pcursor": pcursor,
                "page": "profile"
            },
            "query": "fragment photoContent on PhotoEntity {\n  __typename\n  id\n  duration\n  caption\n  originCaption\n  likeCount\n  viewCount\n  commentCount\n  realLikeCount\n  coverUrl\n  photoUrl\n  photoH265Url\n  manifest\n  manifestH265\n  videoResource\n  coverUrls {\n    url\n    __typename\n  }\n  timestamp\n  expTag\n  animatedCoverUrl\n  distance\n  videoRatio\n  liked\n  stereoType\n  profileUserTopPhoto\n  musicBlocked\n  riskTagContent\n  riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n  __typename\n  id\n  duration\n  caption\n  originCaption\n  likeCount\n  viewCount\n  commentCount\n  realLikeCount\n  coverUrl\n  photoUrl\n  photoH265Url\n  manifest\n  manifestH265\n  videoResource\n  coverUrls {\n    url\n    __typename\n  }\n  timestamp\n  expTag\n  animatedCoverUrl\n  distance\n  videoRatio\n  liked\n  stereoType\n  profileUserTopPhoto\n  musicBlocked\n  riskTagContent\n  riskTagUrl\n}\n\nfragment feedContent on Feed {\n  type\n  author {\n    id\n    name\n    headerUrl\n    following\n    headerUrls {\n      url\n      __typename\n    }\n    __typename\n  }\n  photo {\n    ...photoContent\n    ...recoPhotoFragment\n    __typename\n  }\n  canAddComment\n  llsid\n  status\n  currentPcursor\n  tags {\n    type\n    name\n    __typename\n  }\n  __typename\n}\n\nquery visionProfilePhotoList($pcursor: String, $userId: String, $page: String, $webPageArea: String) {\n  visionProfilePhotoList(pcursor: $pcursor, userId: $userId, page: $page, webPageArea: $webPageArea) {\n    result\n    llsid\n    webPageArea\n    feeds {\n      ...feedContent\n      __typename\n    }\n    hostName\n    pcursor\n    __typename\n  }\n}\n"
        }

        status, response = self.net._requests(url, headers=headers, cookies=cookies, json=data)
        # print(response.json())
        pcursor = response.json()["data"]["visionProfilePhotoList"]["pcursor"]

        for arg in response.json()["data"]["visionProfilePhotoList"]["feeds"]:
            url = arg["photo"]["photoUrl"]
            name = self.encrypt.make_md5(data=arg["photo"]["caption"])
            print(name, url)
            # 下载视频
            self.mit(url, name, headers)
            self.name_lis.append(name)
        print("pcursor", pcursor)
        if pcursor and pcursor != "no_more":
            self.get_url(pcursor)
        else:
            print("self.name_lis", self.name_lis)
            DM.close_pool()
            self.merge_result()
            return None

实测:多线程连续下几千条没什么问题

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值