python爬取某音小姐姐短視訊,今天帶你全自動下載!
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
以下文章來源於騰訊雲 作者:Python小屋屋主
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )
這篇文章主要介紹了基於Python實現全自動下載抖音視訊,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
很多人喜歡玩抖音,我也喜歡看抖音小姐姐,可拿著手機一個個找視訊太費勁。作為一個程式設計師,如何能在電腦前一邊程式設計一邊輕鬆地看抖音小姐姐呢?
下面利用Python,簡單的三個步驟就可以將你喜歡的抖音小姐姐的視訊自動下載下來了。
Charles
Charles是一個App抓包工具,與Filddler的功能相似,利用它可以得到App執行過程中發生的所有網路請求和響應內容。
在電腦端下載安裝完Charles後,需要配置證書,最後開啟SSL監聽。
手機端則是需要與電腦在同一網路下,比如都連線家裡的Wi-Fi,然後在手機的Wi-Fi高階選項裡使用Charles代理,輸入電腦的IP地址,埠8888,最後為證書命名。
連好以後,手機開啟抖音App,隨著操作App的動作,可以獲取到視訊的請求資訊。
通過多次實驗,發現連結的後面是會不停的改變,只有連結的前頭始終不變,即「http://v1-dy」「http://v6-dy」「http://v9-dy」不變。
所以在寫指令碼的時候,可以用這些資訊做為連結開頭。
MitmProxy
利用MitmProxy中的mitmdump元件,對接Python指令碼,用Python實現監聽後的處理。
這裡我只是利用指令碼獲取連結,並沒有直接利用指令碼下載視訊。
因為我是在mitmdump.exe檔案所在的資料夾執行指令碼,腳本里匯入不了requests模組。
不想配置環境變量了,所以只獲取連結。
利用連結再去下載視訊,視訊連結需要去重,因為可能會有重複的。
Python指令碼如下:
def response(flow):urls = ['http://v1-dy', 'http://v3-dy', 'http://v6-dy', 'http://v9-dy']# 對url進行篩選,只選取視訊的urlfor url in urls:if url in flow.request.url:print('\n\n抖音視訊\n\n')with open('douyin.csv', 'a+', encoding='utf-8-sig') as f:f.write(flow.request.url + '\n')
配置抖音的Appium引數:
點選藍色按鈕,手機自動啟動抖音App。接著操作手機,然後點選Appium的重新整理鍵,獲取元素定位程式碼。
通過本次的實踐發現Appium有時並不能很好的獲取元素的定位,針對找不到的元素,我直接對手機螢幕位置進行點選。
由於大家手機螢幕大小不同,這個引數肯定是會變化的,所以存在弊端,無法通用。
左右滑動切換圖片
大致操作如上圖。UP主的主頁圖漏了,請自行腦補,Python程式碼如下:
import timeimport randomfrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.webdriver.common.touch_action import TouchActionfrom selenium.webdriver.support import expected_conditions as EC def main():# 設定驅動配置server = 'http://localhost:4723/wd/hub'desired_caps = {'platformName': 'Android','deviceName': 'STF_AL00','appPackage': 'com.ss.android.ugc.aweme','appActivity': '.main.MainActivity',# 關閉手機軟鍵盤'unicodeKeyboard': True,'resetKeyboard': True}driver = webdriver.Remote(server, desired_caps)wait = WebDriverWait(driver, 60)# 同意使用者隱私協議,點選button_1 = wait.until(EC.presence_of_element_located((By.ID, 'com.ss.android.ugc.aweme:id/q6')))button_1.click()# 禁止電話許可權,點選button_2 = wait.until(EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/permission_deny_button')))button_2.click()# 禁止位置許可權,點選button_3 = wait.until(EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/permission_deny_button')))button_3.click()time.sleep(2)# 向上滑動,進入抖音視訊播放頁面TouchAction(driver).press(x=515, y=1200).move_to(x=515, y=1000).release().perform()# 這裡需要設定一個較長時間的延遲,因為抖音有引導操作和提示,需等待片刻time.sleep(20)# 點選抖音"喜歡"處,以此進入登入介面TouchAction(driver).press(x=950, y=800).release().perform()# 點選密碼登入button_4 = wait.until(EC.presence_of_element_located((By.ID, 'com.ss.android.ugc.aweme:id/afg')))button_4.click()# 輸入賬號button_5 = wait.until(EC.presence_of_element_located((By.ID, 'com.ss.android.ugc.aweme:id/ab_')))button_5.send_keys('你的賬號')# 輸入密碼button_6 = wait.until(EC.presence_of_element_located((By.ID, 'com.ss.android.ugc.aweme:id/aes')))button_6.send_keys('你的密碼')time.sleep(2)# 因為會跳出軟鍵盤,會遮擋登入按鈕,需點選軟鍵盤取消TouchAction(driver).press(x=980, y=1850).release().perform()time.sleep(2)# 點選登入按鈕button_7 = wait.until(EC.presence_of_element_located((By.ID, 'com.ss.android.ugc.aweme:id/abb')))button_7.click()time.sleep(2)# 登入成功,進入抖音視訊介面,點選下方標題欄 "我"TouchAction(driver).press(x=990, y=1850).release().perform()# 進入個人主頁,點選關注處button_8 = wait.until(EC.presence_of_element_located((By.ID, 'com.ss.android.ugc.aweme:id/a_7')))button_8.click()# 進入關注欄,點選第二個關注button_9 = wait.until(EC.presence_of_element_located((By.XPATH, ' /hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.LinearLayout/android.support.v7.widget.RecyclerView/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]')))button_9.click()# 進入UP主主頁,點選第一個視訊button_10 = wait.until(EC.presence_of_element_located((By.ID, 'com.ss.android.ugc.aweme:id/aqm')))button_10.click()# 不斷下滑頁面,直到底部while True:TouchAction(driver).press(x=515, y=1247).move_to(x=515, y=1026).release().perform()time.sleep(float(random.randint(5, 10))) if __name__ == '__main__':main()
下載視訊程式碼,需要對視訊連結去重:
import pandas as pdimport requestsimport os num = 0dom = []folder_path = "F:/video/"os.makedirs(folder_path)df = pd.read_csv('douyin.csv', header=None, names=["url"]) # 對連結去重及去除剛進入抖音獲取的視訊連結for i in df['url'][2:]:if i not in dom:dom.append(i)# 下載視訊for j in dom:url = jnum += 1response = requests.get(url, stream=True)filename = str(num) + '.mp4'with open('F:\\video\\' + filename, 'ab+') as f:f.write(response.content)f.flush()print(filename + '下載完成')
最後成功獲取小姐姐們的全部視訊:
以上就是本文的全部內容,希望對大家的學習有所幫助