用 Python 自動給抖音漂亮小姐姐視訊點贊!

語言: CN / TW / HK

公眾號關注傑哥的IT之旅”,

選擇“星標”,重磅乾貨,第一時間送達!


先來看看這隻爬蟲做了些什麼事兒呢?

1、通過 ADB 控制你的手機,幫你自動刷抖音
2、呼叫百度人臉識別的介面,給視訊畫面中出現的小姐姐打分
3、自動給顏值 70 以上的小姐姐的視訊點贊

有趣的是,根據抖音的推薦演算法,連著刷幾天之後,抖音裡給你推薦的全是漂亮小姐姐了。

成果展示

先演示一下效果。

連線手機(手機要允許ADB除錯),執行爬蟲程式,程式會自動開啟抖音APP,自動尋找漂亮的小姐姐啦。

有趣的是,根據抖音的推薦演算法,連著刷幾天之後,抖音裡給你推薦的全是漂亮小姐姐了。剛開始刷的時候,可能幾十條裡都沒有一個漂亮小姐姐,而刷幾天之後,基本上刷到的每條視訊裡都是漂亮小姐姐。看,這是我刷了三天的 “成果”, 斷斷續續刷了三天時間,已經 “點贊” 了兩百多條漂亮小姐姐的視訊。

咱有一說一啊,先不管是不是因為抖音的美顏濾鏡功能強大,單純從爬蟲爬到的視訊來看,這些小姐姐是真的好看,結果還是令人滿意的。

下面這個是抖音裡檢測到漂亮小姐姐的截圖畫面,本來這是作為臨時檔案,人臉檢測完即刪除的,我看著好看,就給留了下來。

這個爬蟲程式大概就是這樣,下面詳細講解一下,這個爬蟲是怎麼做出來的。

1、基礎準備 這個爬蟲需要用到三個東西。Python 環境,爬蟲程式是用 Python 寫的,肯定要先配置好 Python 的環境啊。沒有配好的自行去安裝一下 Anaconda。

此外,還需要安裝一些必要的庫,如 requests,urllib,PIL等。ADB 環境,我們的爬蟲需要通過 ADB 命令對手機進行操作,實現自動刷抖音,自動點讚的功能。安裝方法自行百度。

人臉識別API,我這裡用的是百度AI的人臉識別介面,大家需要自行註冊一個百度AI 開放平臺的賬號,然後建立一個人臉識別的應用,然後將 appid,api_key,secret_key 三個引數填到爬蟲程式碼這兒即可。

這裡簡單對 ADB 介紹一下。

ADB 的全稱為 Android Debug Bridge,就是起到了除錯橋的作用,用這個可以很方便地對安卓應用進行除錯。

簡單點說,就是你可以用這個工具來操作你的手機,它可以完成你在手機上能做的任何操作。

比如說安裝/解除安裝/開啟/關閉手機APP,滑動螢幕,點選,長按等等。更復雜的操作也能做,我們這裡就不講了,因為我們的這個抖音爬蟲用到的 ADB 指令基本也就這些了。a. ADB 啟動應用 只需要知道應用的 package_name 和 activity_name,然後呼叫下面的 adb 指令,即可開啟相應的應用

adb shell am start -n [package_name] [activity_name]

以抖音 APP 為例,它的 package_name 和 activity_name 如下。

# 抖音App的應用包名和初始Activity
package_name = 'com.ss.android.ugc.aweme'
activity_name = 'com.ss.android.ugc.aweme.splash.SplashActivity'```

所以在命令列中執行下面的指令,即可開啟手機中的抖音APP。

adb shell am start -n com.ss.android.ugc.aweme com.ss.android.ugc.aweme.splash.SplashActivity```

b. ADB 點選螢幕

在命令列中執行下面指令,即可實現手機螢幕的點選。其中 1330 1750 是點選的 x y座標。

adb shell input tap 1330 1750```

以此爬蟲裡的抖音點贊為例,我只需要記錄下抖音app中,點贊按鈕對應的螢幕座標,然後呼叫這句指令,即可完成自動點贊。

c. ADB 滑動螢幕

在命令列中執行下面指令,實現的是手機螢幕的滑動操作。其中有 5 個引數。這五個數字分別表示的是,滑動起始點的 x y 座標,滑動終止點的 x y 座標,滑動時長。

adb shell input swipe 900 1400 400 1400 100```

比如上面這句指令表示的就是,從座標(900,1400)的點,滑動到座標 (400,1400)的點,滑動過程 100 毫秒。

其實,這句指令稍微改一改,把起始座標和終止座標設為一致,滑動時長設長一些,滑動操作就變成了 “長按螢幕” 操作了。

基本準備工作也差不多就這些了,下面講一下爬蟲程式的整體思路吧。

爬蟲整體思路

如圖所示,爬蟲的整個爬取思路如下。

首先啟動抖音 APP,等第一個視訊加載出來播放之後,擷取螢幕畫面,呼叫百度 AI 的人臉識別介面進行人臉檢測和評分。

如果畫面中檢測到顏值評分70分以上,且性別為女的人臉,則點選螢幕中的”點贊“按鈕,然後上滑播放下一條視訊

如果畫面中中沒有出現人臉,或者性別為男,或者顏值不足70,則繼續截圖檢測,直到視訊播放結束,或者找到滿足條件的人臉為止,然後上滑播放下一條視訊。為了儘可能地不錯過有漂亮小姐姐的抖音,每條視訊中會擷取 4 - 5 張圖片進行檢測,只要有一張截圖中有高顏值的小姐姐,那麼我們就對這個視訊進行點贊。如果這樣都檢測不出來,只能說小姐姐藏得太深,或者漂亮的不夠明顯了

大概思路就是這樣,下面我們就來動手完成爬蟲吧

動手擼碼寫爬蟲

由於爬蟲還是稍微有點大,所以我拆成三個部分來寫。

人臉識別部分,ADB 控制部分,和爬蟲主邏輯部分。

(1)人臉識別部分

這部分用了呼叫了 百度AI 的人臉識別介面,需要將你自己申請的 appid,api_key,secret_key 三個引數填到程式碼裡。

import base64
import urllib
import json
import requests
import sys

appid = '填寫你申請的 appid'
api_key = '填寫你申請的 api_key'
secret_key = '填寫你申請的 secret_key'
這部分的程式碼主要包括四個函式,包括

(2)ADB 控制部分

ADB 控制部分,大概思路就是通過python中的 os 庫執行 adb 指令,來對手機進行操作。

主要包括四個函式:

start_my_app 函式,用來啟動 抖音 APP。
save_video_met 函式,點選 ”點贊“ 按鈕。在檢測到漂亮小姐姐之後呼叫。
play_next_video 函式,向上滑動螢幕,播放下一個視訊。
get_screen_shot_part_img 函式,用來擷取螢幕影象,儲存到電腦中,以便後續人臉識別。

import os
from PIL import Image

# 抖音App的應用包名和初始Activity
package_name = 'com.ss.android.ugc.aweme'
activity_name = 'com.ss.android.ugc.aweme.splash.SplashActivity'

def start_my_app(package_name, activity_name):
    # 開啟 Android 應用
    os.popen('adb shell am start -n %s/%s' % (package_name, activity_name))

def save_video_met(screen_name, find_girl_num):
    # 儲存截圖
    img = Image.open(screen_name).convert('RGB')
    img.save("漂亮的小姐姐/DYGirl_%d.jpg" % find_girl_num)
    # 給視訊點贊
    os.system("adb shell input tap 1330 1750")

def play_next_video():
    # 向上劃螢幕,播放下一段視訊
    os.system("adb shell input swipe 540 1300 540 500 100")

def get_screen_shot_part_img(image_name):
    # 截圖
    os.system("adb shell /system/bin/screencap -p /sdcard/screenshot.jpg")
    os.system("adb pull /sdcard/screenshot.jpg %s" % image_name)
    # 開啟圖片
    img = Image.open(image_name).convert('RGB')
    # 圖片的原寬、高
    w, h = img.size
    # 擷取部分,去掉其頭像、其他內容雜亂元素
    img = img.crop((040012002750))
    img.thumbnail((int(w / 1.5), int(h / 1.5)))
    # 儲存到本地
    img.save(image_name)
    return image_name```

這些函式中的座標是根據我手機的螢幕座標寫的(華為 Mate 20 Pro),其他型號手機的同學,可以根據自己手機螢幕的解析度,對這些引數進行調整。

修改座標的方法我也大概說一下,在你手機的設定中,找到開發人員選項,然後將指標位置這個開啟,然後你就可以看到你點選到螢幕的位置了,頂部也會顯示你點選的位置座標。

開啟抖音,手指放到點贊按鈕上,記錄下此時螢幕頂部顯示的座標,然後把這個座標替換到程式碼中就好了。

(3)程式主邏輯部分

根據前面分析的流程圖,編寫爬蟲程式的主邏輯。

import datetime
import time
import shutil

if __name__ == '__main__':

    access_token = get_access_token()
    # 設定一條視訊最長的識別時間,要是墨跡 10 秒還不露臉,也不管她了,下一個
    RECOGNITE_TOTAL_TIME = 10 
    # 識別次數
    recognite_count = 0

    # 圖片型別【網路和本地】
    TYPE_IMAGE_NETWORK = 0
    TYPE_IMAGE_LOCAL = 1

    print("開啟抖音~")

    start_my_app(package_name, activity_name)
    time.sleep(5)
    print("開始播放視訊~")
    find_girl_num = 0
    # 對當前視訊截圖去人臉識別
    while True:
        # 開始識別的時間
        recognite_time_start = datetime.datetime.now()
        # 識別次數
        recognite_count = 1
        # 迴圈地去刷抖音
        while True:
            # 獲取截圖
            screen_name = get_screen_shot_part_img('images/temp%d.jpg' % recognite_count)
            # 人臉識別
            recognite_result = analysis_face(parse_face_pic(screen_name, TYPE_IMAGE_LOCAL, access_token))
            recognite_count += 1
            # 第n次識別結束後的時間
            recognite_time_end = datetime.datetime.now()
            # 這是一個美女
            if recognite_result:
                find_girl_num += 1
                save_video_met(screen_name, find_girl_num)
                print("已經發現 %d 個漂亮小姐姐" % find_girl_num)
                break
            else:
                if (recognite_time_end - recognite_time_start).seconds < RECOGNITE_TOTAL_TIME:
                    continue
                else:
                    print('超時!!!這是一條沒有吸引力的視訊!')
                    # 跳出裡層迴圈
                    break
        # 刪除臨時檔案
        shutil.rmtree('./images')
        time.sleep(0.05)
        os.mkdir('./images')

        # 播放下一條視訊
        print('==' * 30)
        time.sleep(2)
        print('準備播放下一個視訊~')
        play_next_video()
        time.sleep(2)```

有時候網路可能卡一些,視訊載入需要一些時間,所以每次看到下一條視訊時,先停兩秒,等視訊差不多載入好了再開始檢測。

後記

這爬蟲我斷斷續續玩了一段時間了,反正沒事兒的時候手機放一邊,把爬蟲開了後臺跑著,讓它自己刷著玩。然後晚上拿起手機一看,哇手機裡全是漂亮的小姐姐

來源:Python之禪

公眾號後臺回覆:wx,新增我的微信,可加入讀者交流群。

推薦閱讀

太秀了!用Excel也能實現和Python資料分析一樣的功能!

利用 Python 分析了某化妝品企業的銷售情況,我得出的結論是?

Python 爬取鏈家成都二手房源資訊 asyncio + aiohttp 非同步爬蟲實戰

總說手機沒有“好桌布”,Python一次性抓取500張“美女”圖片,夠不夠用!

利用 Python 爬取了 37483 條上海二手房資訊,我得出的結論是?

本文分享自微信公眾號 - 傑哥的IT之旅(Jake_Internet)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。