美文网首页
快手下载某个用户视频的代码python

快手下载某个用户视频的代码python

作者: lk_erzanml | 来源:发表于2022-09-18 22:54 被阅读0次
import requests
import json
import os
import re
from concurrent.futures import ThreadPoolExecutor


# 需要下载用户的id
# 例如点进去某个用户后,浏览器地址https://www.kuaishou.com/profile/3x3zb2597vbu2fc最后面的就是这个用户的id
userId="3xn3jcnkwipvfkq"
# 登录完成网页快手后去f12找找cookie
cookie=""


# 创建保存视频的文件夹
e = "快手视频"
if not os.path.exists(e):
    os.mkdir(e)


url_ = "https://www.kuaishou.com/graphql"


#头部信息最好自己找一下,粘贴过来
headers1 = {
    "accept": "*/*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive",
    "Content-Length": "1176",
    "content-type": "application/json",
    # Cookie要登录下载自己的
    "Cookie":cookie,
    "Host": "www.kuaishou.com",
    "Origin": "https://www.kuaishou.com",
    "Referer": "https://www.kuaishou.com/profile/{}".format(userId),
    "sec-ch-ua": '"Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"',
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": 'Windows',
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844."
                  "51 Sa"
                  "fari/537.36"
    }

headers2 = {
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
        }

urls = []  #视频链接地址
names = []  #视频名字

# for循环获取五页的视频url和标题
# 并将他们存进urls列表和names列表中
pcursor = ''

while 1:
    data={"operationName":"visionProfilePhotoList","variables":{"userId":userId,"pcursor":pcursor,"page":"profile"},"query":"fragment photoContent on PhotoEntity {\n  id\n  duration\n  caption\n  likeCount\n  viewCount\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  __typename\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    __typename\n  }\n  canAddComment\n  llsid\n  status\n  currentPcursor\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"}
    # print(datas)
    data = json.dumps(data)
    res = requests.post(url=url_, headers=headers1, data=data)
    json_data = res.json()
    # print(json_data)
    feed_list = json_data["data"]["visionProfilePhotoList"]['feeds']
    # print(feed_list)
    print("成功")
    for feed in feed_list:
        url = feed['photo']['photoUrl']
        # print(url)
        name = feed['photo']['caption']

        id=feed['photo']['id']

        new_name = re.sub(r'[\\/:*?"<>|\n]', '_', name)
        urls.append(url)
        names.append(new_name+"____"+id)
    pcursor = json_data["data"]["visionProfilePhotoList"]['pcursor']
    print(pcursor)
    if "no_more"==pcursor:
        break


# 定义:视频url,和视频标题为形参的函数,以元组形式传参数
def download(zipp):
    (href, title) = zipp
    response = requests.get(url=href, headers=headers2).content
    with open(e + "/" + title + ".mp4", mode="wb") as f:
        f.write(response)
        print('保存完成:', title)


zips = zip(urls, names)
pool = ThreadPoolExecutor(8)

for zip_ in zips:
    pool.submit(download, zip_)
pool.shutdown(wait=True)

相关文章

网友评论

      本文标题:快手下载某个用户视频的代码python

      本文链接:https://www.haomeiwen.com/subject/uruuortx.html