用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 Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...