用Python批量爬取快手視頻,實現自動關註/點贊/評論

来源:https://www.cnblogs.com/hahaa/archive/2022/06/16/16383162.html
-Advertisement-
Play Games

今天來點特別的~ 不僅把好看的視頻全部pa下來,咱們還要實現自動評論、點贊、關註三連~ 寶,你也可以順手給我個三連嗎?給你個摸摸大~ 抓包分析流程 我寫成了文檔,都在這個PDF裡面了,但是好像不能上傳,所以點一下大家自行下載吧! 點我獲取,提取密碼 qwer 開始代碼 獲取視頻的代碼 import ...


今天來點特別的~

不僅把好看的視頻全部pa下來,咱們還要實現自動評論、點贊、關註三連~

寶,你也可以順手給我個三連嗎?給你個摸摸大~

 

 

抓包分析流程

我寫成了文檔,都在這個PDF裡面了,但是好像不能上傳,所以點一下大家自行下載吧!
點我獲取,提取密碼 qwer

開始代碼

獲取視頻的代碼

import requests     # 發送請求 第三方模塊(第三方應用 pip)
import re


# 偽裝
# 1. 選中要替換的代碼
# 2. ctrl + R
# 3. 第一個框(.*?): (.*)
# 4. 在第二個框裡面輸入 '$1': '$2',
# 5. 點擊全部替換(* 點亮 * 號)
# Python學習交流群 279199867
headers = {
    'content-type': 'application/json',
    'Cookie': 'kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; did=web_ea128125517a46bd491ae9ccb255e242; client_key=65890b29; didv=1646739254078; userId=270932146; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABctRgGaXi5efEBpnbdtJMp3nnnXqENRWBoFQABtOr1ZFUNAjEo5NTZ4F0leSypsSFE4_-FGTnBqKEYh8Wcrszm3FGF03559Z9bFQCX_8ew_kLKPWVB9ZRlWQgISoG4-XZXIOqiBgkQKsPbpYKiA3X4_0rMDbo9-c0nWXeOoThekj8W3u7_yfI4fUY3h5WgTEDYT0yrXkZmhWlFV_jpVxDrBoSzFZBnBL4suA5hQVn0dPKLsMxIiCo1i0bY9V6-OVEk7yMnH86RNliTZACHvLPjL9FTHHQOigFMAE; kuaishou.server.web_ph=09735672944cbf9e53431bf3e0514a0d058b',
    'Host': 'www.***.com',
    'Origin': 'https://www.***.com',
    # 防盜鏈
    'Referer': 'https://www.kuaishou.com/profile/3xhv7zhkfr3rqag',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36',
}
url = 'https://www.***.com/graphql'


def get_page(pcursor):
    # 指定要誰的視頻
    data = {
        "operationName": "visionProfilePhotoList",
        "query": "query 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      type\n      author {\n        id\n        name\n        following\n        headerUrl\n        headerUrls {\n          cdn\n          url\n          __typename\n        }\n        __typename\n      }\n      tags {\n        type\n        name\n        __typename\n      }\n      photo {\n        id\n        duration\n        caption\n        likeCount\n        realLikeCount\n        coverUrl\n        coverUrls {\n          cdn\n          url\n          __typename\n        }\n        photoUrls {\n          cdn\n          url\n          __typename\n        }\n        photoUrl\n        liked\n        timestamp\n        expTag\n        animatedCoverUrl\n        stereoType\n        videoRatio\n        profileUserTopPhoto\n        __typename\n      }\n      canAddComment\n      currentPcursor\n      llsid\n      status\n      __typename\n    }\n    hostName\n    pcursor\n    __typename\n  }\n}\n",
        "variables": {"userId": "3x2vsxyxbbwcjta", "pcursor": pcursor, "page": "profile"}
    }
    # 1. 發送請求  get  post
    response = requests.post(url=url, headers=headers, json=data)
    # <Response [200]>: 請求成功
    # 2. 獲取數據 .json() 返回字典類型數據
    # .text: 拿到的就是 文本內容 python數據類型 字元串 > 字典類型 > 鍵值對(拼音)方式取值
    json_data = response.json()
    # 3. 解析數據
    # 新華字典 = {'A': '啊', 'B': '不', 'C': '從'}
    # 新華字典['B']  python數據容器 存儲數據
    # 正則
    feeds = json_data['data']['visionProfilePhotoList']['feeds']
    pcursor = json_data['data']['visionProfilePhotoList']['pcursor']
    for feed in feeds:
        photoUrl = feed['photo']['photoUrl']
        caption = feed['photo']['caption']
        # 正則替換
        # 第一個參數裡面是需要替換的一些字元
        # 第二個參數 是把這些字元替換為 空
        # 第三個參數 是需要替換的變數
        # \\ : \
        # \/ : /
        caption = re.sub('[\\\/:*?"<>|\n]', '', caption)
        print(caption, photoUrl)
        # 4. 保存數據  如果你們拿到的鏈接 就是 視頻 或者 音頻 或者 圖片
        # .content: 獲取視頻(音頻 / 圖片) 二進位數據
        video_data = requests.get(photoUrl).content
        # 視頻名稱
        # wb 以二進位覆蓋寫入
        with open(f'video/{caption}.mp4', mode='wb') as f:
            f.write(video_data)
    # 遞歸: 2.出口
    if pcursor == "no_more":
        # 退出?
        return
    # 遞歸: 1.自己調用自己
    get_page(pcursor)

get_page("")

 

 

自動評論

def post_comment(self, content, photoAuthorId, photoId):
    """
    :param content: 評論內容
    :param photoAuthorId: 該作品的作者id
    :param photoId: 作品id
    :return: 有沒有成功
    """
    json = {
        'operationName': "visionAddComment",
        'query': "mutation visionAddComment($photoId: String, $photoAuthorId: String, $content: String, $replyToCommentId: ID, $replyTo: ID, $expTag: String) {  (photoId: $photoId, photoAuthorId: $photoAuthorId, content: $content, replyToCommentId: $replyToCommentId, replyTo: $replyTo, expTag: $expTag) {\n    result\n    commentId\n    content\n    timestamp\n    status\n    __typename\n  }\n}\n",
        'variables': {
            'content': content,
            'expTag': "1_a/2005158523885162817_xpcwebsearchxxnull0",
            'photoAuthorId': photoAuthorId,
            'photoId': photoId
        }
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

 

自動點贊

def is_like(self, photoId, photoAuthorId):
    """
    :param photoId: 作品id
    :param photoAuthorId: 該作品的作者id
    :return: 有沒有成功
    """
    json = {
        'operationName': "visionVideoLike",
        'query': "mutation visionVideoLike($photoId: String, $photoAuthorId: String, $cancel: Int, $expTag: String) {\n  visionVideoLike(photoId: $photoId, photoAuthorId: $photoAuthorId, cancel: $cancel, expTag: $expTag) {\n    result\n    __typename\n  }\n}",
        'variables': {
            'cancel': 0,
            'expTag': "1_a/2005158523885162817_xpcwebsearchxxnull0",
            'photoAuthorId': photoAuthorId,
            'photoId': photoId
        }
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

 

自動關註

def is_follow(self, touid):
    """

    :param touid: 用戶id
    :return:
    """
    json = {
        'operationName': "visionFollow",
        'query': "mutation visionFollow($touid: String, $ftype: Int, $followSource: Int, $expTag: String) {\n  visionFollow(touid: $touid, ftype: $ftype, followSource: $followSource, expTag: $expTag) {\n       followStatus\n    hostName\n    error_msg\n    __typename\n  }\n}\n",
        'variables': {
            'expTag': "1_a/2005158523885162817_xpcwebsearchxxnull0",
            'followSource': 3,
            'ftype': 1,
            'touid': touid
        }
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

溜了溜了,今天就到這裡,兄弟們快去試試吧!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 涉及到的鏈接: W3school-JavaScript教程 JavaScript簡介 文檔對象模型 (DOM) JavaScript BOM(瀏覽器對象模型) JS面向對象之原型 JavaScript基於原型的面向對象編程 js的變數(詳解) 關於JavaScript作用域的理解 簡單談談JavaS ...
  • 1、前言 單例模式屬於創建型模式,保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例,這個類稱為單例類,它提供全局訪問的方法。 2、介紹 2.1、主要解決 防止一個系統全局使用的類頻繁地創建與銷毀、解決多線程併發訪問的問題 ...
  • 1 前言 函數調用很好理解,即使剛學沒多久的朋友也知道函數調用是怎麼實現的,即調用一個已經封裝好的函數,實現某個特定的功能。 把一個或者多個功能通過函數的方式封裝起來,對外只提供一個簡單的函數介面,然後在其他地方調用即可 2 函數調用方式 函數調用難道還能怎麼調用?不就封裝好直接調用嗎??? 函數調 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 一、Pycharm軟體簡介 產品簡介 PyCharm是一種Python IDE(Integrated Development Environment,集成開發環境),帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具,比如調試、語法高亮、項目管理、代碼跳轉、智能提示、自動完成、單元測 ...
  • 一. 打包參數 1. * 的作用:在函數定義中,收集所有的位置參數到一個新的元組,並將這個元組賦值給變數args >>> def f(*args): print(args) >>> f() () >>> f(1) (1,) >>> f(1, 2, 3, 4) (1, 2, 3, 4) >>> 2. ...
  • 1、Date 1.1 Date實例化 Date date1 = new Date(); System.out.println(date1); //Thu Jun 16 19:18:56 CST 2022 1.2 獲取日期毫秒數 getTime() System.out.println(date1.g ...
  • 大家好!我們是阿裡云云效智能代碼天團!旨在用人工智慧解放各位開發者的生產力!或許你們關註過我們的話會知道,我們有一個超酷的產品它叫Alibaba Cloud AI Coding Assistant,小名兒叫Cosy。說起這代碼補全和代碼搜索那可是樣樣精通٩(˃̶͈̀௰˂̶͈́)و 我們不僅把文檔搬進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...