Python爬蟲-抖音小視頻-mitmproxy與Appium


目的:  爬取抖音小視頻

工具:  mitmproxy、Appium

思路:

  1.  通過 mitmproxy 截取請求, 找出 response 為 video 的請求.

  2.  通過 mitmdump 對接 python 對上述請求進行處理.

  3.  配合 Appium 實現自動抓取視頻.

方法:

  1.  設置 mitmprxoy 為手機的代理, 並且啟動 mitmproxy.

  2.  打開抖音, 並滑動頁面.

  3.  觀察 mitmproxy 的頁面. 通過不停的滑動, 返回類型為 video 都是如下類型的請求.

所以猜測儲存視頻的服務器都是如下類型(不一定全正確, 但是至少有正確的).

web_list = ['v3-dy.ixigua.com', 'v3-dy-x.ixigua.com', 'v3-dy-y.ixigua.com', 'v3-dy-z.ixigua.com',

      'v6-dy.ixigua.com', 'v6-dy-x.ixigua.com', 'v6-dy-y.ixigua.com', 'v6-dy-z.ixigua.com',

      'v9-dy.ixigua.com', 'v9-dy-x.ixigua.com', 'v9-dy-y.ixigua.com', 'v9-dy-z.ixigua.com']

  4.  編寫處理截獲數據的處理腳本, 如下:

 1 from urllib.request import urlretrieve  2 # 視頻編號
 3 num = 1
 4 # 用於視頻去重
 5 duplicate = set()  6 
 7 
 8 def request(flow):  9     # 本次請求的url
10     video_url = flow.request.url 11     global num 12     url_list = ['v3-dy.ixigua.com', 'v3-dy-x.ixigua.com', 'v3-dy-y.ixigua.com', 'v3-dy-z.ixigua.com', 13                 'v6-dy.ixigua.com', 'v6-dy-x.ixigua.com', 'v6-dy-y.ixigua.com', 'v6-dy-z.ixigua.com', 14                 'v9-dy.ixigua.com', 'v9-dy-x.ixigua.com', 'v9-dy-y.ixigua.com', 'v9-dy-z.ixigua.com'] 15     # 視頻保存路徑
16     path = '/home/ysl/視頻/'
17     # 判斷是否重復, 不重復才繼續執行
18     if video_url not in duplicate: 19  duplicate.add(video_url) 20         for url in url_list: 21             if url in flow.request.url: 22                 filename = path + str(num) + '.mp4'
23                 # 下載視頻, 保存到本地
24  urlretrieve(flow.request.url, filename) 25                 print(filename + '下載完成') 26                 num += 1
27                 # 這里是猜測不同服務器里可能存有相同的視頻, 所以一旦下載到視頻就退出循環.
28                 return

現在手動滑動視頻的話就已經會逐個下載了, 但是手動的畢竟麻煩, 所以搭配 Appium 實現自動化.

  5.  將手機通過數據線和運行 Appium 的電腦相連, 打開手機的 USB 調試功能.  首先需要確定啟動抖音的 Desired Capabilities 參數, platformName、deviceName、appPackage、appActivity, 具體的獲取方法可以百度一下, 對於我手機上的抖音而言, 參數如下:

這里我還設置了一下 noReset 為 true, 不然的話, 好像每一次手機都會重新安裝抖音. 下面是 Appium 驅動手機的代碼:

 1 from appium import webdriver  2 from appium.webdriver.common.touch_action import TouchAction  3 import time  4 
 5 
 6 # Appium服務器
 7 server = 'http://localhost:4723/wd/hub'
 8 # 參數
 9 desired_caps = { 10     "appActivity": ".main.MainActivity", 11     "appPackage": "com.ss.android.ugc.aweme", 12     "deviceName": "SM_G9500", 13     "platformName": "Android", 14     "noReset": True 15 } 16 # 類似於selenium
17 driver = webdriver.Remote(server, desired_caps) 18 # 等待app啟動
19 time.sleep(10) 20 # 設置時限, 如果想一直爬可以使用while True.
21 for i in range(20): 22     # TouchAction(driver).press(x=607, y=1976).move_to(x=613, y=982).release().perform()
23     time.sleep(2) 24     driver.swipe(607, 1976, 613, 800, 500)

確保 Appium 服務已經啟動.

  6. 命令行中執行 mitmdump -s 腳本名, 然后運行 Appium 代碼. 

 

結果:  Appium 驅動手機滑動頁面, 抖音小視頻被下載至指定路徑.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM