DouyinアプリからビデオをキャプチャするためのPythonの簡単な使用

Pythonを使用してアプリデータをクロールする方法を記録します。この記事では、例としてクロールTikTokビデオアプリを使用します。

プログラミングツール:pycharm

アプリキャプチャツール:mitmproxy

アプリ自動化ツール:appium

動作環境:windows10

アイデア:

多くの人がPythonを学び、どこから始めればよいのかわかりません。
多くの人がPythonを学び、基本的な文法を習得した後、どこから始めればよいかわかりません。
事例研究を行った多くの人々は、より高度な知識を学ぶ方法を知りません。
これらの3つのタイプの人々のために、私はあなたに優れた学習プラットフォームを提供し、ビデオチュートリアル、電子書籍、およびコースのソースコードを無料で受け取ることができます!??
¤QQグループ:704929215

必要なツールが構成されていると仮定します

1. mitmproxyを使用してモバイルアプリをキャプチャし、必要なコンテンツを取得します

2. appium自動テストツールを使用してアプリを駆動し、人間の行動(スライド、クリックなど)をシミュレートします。

3. 1と2を組み合わせて、自動クローラーの効果を実現します

1. mitmproxy / mitmdumpパケットキャプチャ

mitmproxyがインストールされ、電話とPCが同じローカルエリアネットワークにあり、mitmproxyのCA証明書も構成されていることを確認してください。インターネットには関連する構成チュートリアルが多数あるため、ここではスキップします。

mitmproxyはWindowsシステムをサポートしていないため、ここではそのコンポーネントの1つであるmitmdumpを使用します。これはmitmproxyのコマンドラインインターフェイスです。これを使用して、Pythonスクリプトに接続し、Pythonで事後監視処理を実装できます。

mitmproxyを設定した後、コンソールでmitmdumpと入力し、電話でDouyinアプリを開くと、以下に示すように、mitmdumpは電話にすべてのリクエストを表示します。

Douyinアプリにアクセスして、mitmdumpによって表示されるリクエストを確認できます。プレフィックスは次のとおりです。

http://v1-dy.ixigua.com/;http://v3-dy.ixigua.com/;http://v9-dy.ixigua.com/

これらの3種類のプレフィックスが付いたURLは、ターゲットのDouyinビデオURLです。

次に、ビデオをダウンロードするためのPythonスクリプトを作成する必要があります。スクリプトを実行するには、mitmdump -s scripts.py(ここではPythonファイル名)を使用する必要があります。

import requests
# 文件路径
path = 'D:/video/'
num = 1788
 
 
def response(flow):
    global num
    # 经测试发现视频url前缀主要是3个
    target_urls = ['http://v1-dy.ixigua.com/', 'http://v9-dy.ixigua.com/',
                   'http://v3-dy.ixigua.com/']
    for url in target_urls:
        # 过滤掉不需要的url
        if flow.request.url.startswith(url):
            # 设置视频名
            filename = path + str(num) + '.mp4'
            # 使用request获取视频url的内容
            # stream=True作用是推迟下载响应体直到访问Response.content属性
            res = requests.get(flow.request.url, stream=True)
            # 将视频写入文件夹
            with open(filename, 'ab') as f:
                f.write(res.content)
                f.flush()
                print(filename + '下载完成')
            num += 1

コードは比較的ラフですが、基本的なロジックはまだ比較的明確なので、Tik Tokビデオをダウンロードできますが、この方法には欠点があります。つまり、ビデオを取得するには、TikTokの次のビデオを常にスライドさせる必要があります。現時点では、強力なappium自動テストツールを使用して解決できます。

2.Appiumは携帯電話をシミュレートします

appiumが依存するAndroidとSDKを必ず構成してください。インターネットには多くのチュートリアルがあるため、ここでは説明しません。

appiumの使い方はとても簡単です。まず、appiumを開きます。起動インターフェイスは次のとおりです。

[サーバーの開始]ボタンをクリックして、appiumサービスを開始します

データケーブルを介してAndroidフォンをPCに接続し、同時にUSBデバッグ機能をオンにすると、adbコマンド(オンラインで見つけることができます)を入力して接続をテストできます。次の結果が表示された場合は、接続成功しています

modelはデバイスの名前であり、後続の構成に使用されます。次に、下の図の矢印が指すボタンをクリックすると、構成ページが表示されます。

右下隅のJSON表現で、スタートアップアプリのDesired Capabilitiesパラメーター(paltformName、deviceName、appPackage、およびappActivity)を構成します。

platformName:プラットフォーム名。通常はAndroidまたはiOSです。

deviceName:デバイス名、特定の種類の電話

appPackage:アプリパッケージ名

appActivity:エントリActivityの名前。通常はで始まります。

platformNameとdeviceNameは比較的簡単に取得できますが、appPackageとappActivityは次の方法で取得できます。

コンソールでadblogcat> D:\ log.logコマンドを入力し、携帯電話でDouyinアプリを開き、Dドライブでlog.logファイルを開いて、Displayedキーワードを探します。

上の図から、Displayedの背後にあるcom.ss.android.ugc.awemeがappPackageに対応し、.main.MainActivityがappActivityに対応していることがわかります。最後に、構成結果は次のとおりです。

{
  "platformName": "Android",
  "deviceName": "Mi_Note_3",
  "appPackage": "com.ss.android.ugc.aweme",
  "appActivity": ".main.MainActivity"
}

次に、[セッションの開始]をクリックしてAndroidフォンでDouyinアプリを起動し、スタートアップページに入ります。同時に、デバッグウィンドウがPCにポップアップ表示されます。このウィンドウから、現在の電話ページをプレビューし、でさまざまな操作をシミュレートできます。電話。要点なので、スキップしてください。

以下では、Pythonスクリプトを使用してアプリを駆動し、pycharmで直接実行します

from appium import webdriver
from time import sleep
 
 
class Action():
    def __init__(self):
        # 初始化配置,设置Desired Capabilities参数
        self.desired_caps = {
            "platformName": "Android",
            "deviceName": "Mi_Note_3",
            "appPackage": "com.ss.android.ugc.aweme",
            "appActivity": ".main.MainActivity"
        }
        # 指定Appium Server
        self.server = 'http://localhost:4723/wd/hub'
        # 新建一个Session
        self.driver = webdriver.Remote(self.server, self.desired_caps)
        # 设置滑动初始坐标和滑动距离
        self.start_x = 500
        self.start_y = 1500
        self.distance = 1300
 
    def comments(self):
        sleep(2)
        # app开启之后点击一次屏幕,确保页面的展示
        self.driver.tap([(500, 1200)], 500)
 
    def scroll(self):
        # 无限滑动
        while True:
            # 模拟滑动
            self.driver.swipe(self.start_x, self.start_y, self.start_x, 
                              self.start_y-self.distance)
            # 设置延时等待
            sleep(2)
 
    def main(self):
        self.comments()
        self.scroll()
 
 
if __name__ == '__main__':
 
    action = Action()
    action.main()

以下はクロールプロセスです。ps:重複する動画がときどきクロールされる

———————————————————————————————————————————

 

おすすめ

転載: blog.csdn.net/Python_sn/article/details/110429213