1. 程式人生 > 其它 >20213327 王曙博 《python程式設計》實驗四報告

20213327 王曙博 《python程式設計》實驗四報告

課程:《Python程式設計》
班級: 2133
姓名: 王曙博
學號:20213327
實驗教師:王志強
實驗日期:2022年5月31日
必修/選修: 公選課

一、實驗內容

用Python爬取抖音網頁版不可下載的視訊並儲存下來。

二、實驗過程與結果

1、自己需要了解的內容

       要爬取資料,網頁版抖音無法下載。而我們要知道,一個網站播放視訊,比如你在瀏覽器輸入抖音並回車,那麼就會發起請求。需要的url,就是網路資源定位符,web伺服器獲取資料,要判斷是不是一個正確的請求,請求的是什麼,視訊url返回前端,web伺服器把資料再傳輸給瀏覽器就可以播放了。

2、編寫程式碼與分析

(1)首先我需要的庫是requests庫

我在終端用pip重新安裝了庫

(2)建立一個資料夾並開啟

(3)對於網站的分析

開啟網頁版抖音並開啟視訊

 接著用瀏覽器自帶的F12檢查

 打開發現是沒有請求的,這裡再次重新整理網頁

 在網路裡面可以看到很多的請求

 可以看到是get請求,response headers是響應頭

request headers是請求頭

 cookie可以理解為是儲存資訊,賬號密碼,登陸狀態

 user-agent是我的基本資訊,代表正常使用者,可以看到我是Win10系統,64位之類,也會有瀏覽器資訊

我們在media裡可以找到存放視訊的地址

 這是我所需要的複製下來,再次確認,複製後在瀏覽器開啟

 視訊資源地址正確,型別是MP4檔案

(4)寫程式碼

導包

 發起請求後,接收,判斷正常會返回資料

 複製進去,給物件res,發起get請求響應給到res

 請求頭,因為我是爬蟲程式,所以要偽裝成一個正常使用者

 我的電腦資訊

 需要referer-從哪跳轉過來,注意冒號那裡,電腦資訊後要有逗號

 這裡很重要,會開啟一個雞蛋布丁檔案,用來寫入資料,如果沒有這個檔案會建立一個,如果有,就會覆蓋裡面的內容

 res.content二進位制,視訊是二進位制

3、執行及結果

(1)執行正常

 可以看到已經有這個檔案,接下來看是否爬取成功

 已經儲存至本地了,說明爬取成功

(2)使用華為雲伺服器

配置好後開機

 遠端登入

 登入winscp連線到主機,因為我之前在vscode執行過,已經爬取了視訊,所以先把爬取的視訊刪除,確保資料夾只有程式後,傳到主機裡

 接下來找到程式並執行

 已經執行成功,並且在左邊看見資料夾已經有了視訊

 重新整理後也可以看見已經爬取視訊,拖到桌面或者資料夾就可以了,關機。

三、實驗程式碼

import requests #導包
url = ' https://v26-web.douyinvod.com/a19e70c43bd6e11067eb83ab419ffe77/629571c5/video/tos/cn/tos-cn-ve-15/743a6bed804a48e7adb9b4a7947efc80/?a=6383&ch=26&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=1221&bt=1221&cs=0&ds=4&ft=X1nbLXvvBQ3AUq8yq8Z.wNnOYZlc9PmrF2bLU~AGNiZm&mime_type=video_mp4&qs=0&rc=MzxnNTg1ODUzZTU8aWlkOEBpajdlbDZycHNmdzMzZWkzM0BhMzQwMTNjNi0xMi9hLy02YSNva2dpaC5jMV5fLS0vLTBzcw%3D%3D&l=202205310837080101511902324648AAD9'
#視訊存放地址需要自己找,注意抖音視訊存放地址反爬,一段時間就會失效
headers = {#自己電腦資訊,跳轉,用來偽裝
   'User-Agent':' Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.4153 SLBChan/33',
   'Referer':' https://v26-web.douyinvod.com/a19e70c43bd6e11067eb83ab419ffe77/629571c5/video/tos/cn/tos-cn-ve-15/743a6bed804a48e7adb9b4a7947efc80/?a=6383&ch=26&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=1221&bt=1221&cs=0&ds=4&ft=X1nbLXvvBQ3AUq8yq8Z.wNnOYZlc9PmrF2bLU~AGNiZm&mime_type=video_mp4&qs=0&rc=MzxnNTg1ODUzZTU8aWlkOEBpajdlbDZycHNmdzMzZWkzM0BhMzQwMTNjNi0xMi9hLy02YSNva2dpaC5jMV5fLS0vLTBzcw%3D%3D&l=202205310837080101511902324648AAD9'
}#注意格式,否則無法執行。這兩個是在視訊地址網頁檢查進行查詢,找錯也無法爬取。
res = requests.get(url,headers)#給物件res,發起get請求響應給到res
with open('雞蛋布丁.mp4','wb') as f: #開啟一個雞蛋布丁檔案,用來寫入資料,如果沒有這個檔案會建立一個,如果有,就會覆蓋裡面的內容
    f.write(res.content)# res.content二進位制,視訊是二進位制

四、實驗中的問題

1、剛開始找不到正確的url地址,多次檢查詢到。

2、出現無法執行的問題,發現是User-Agent後面沒有逗號。

3、還有一個無法執行的問題是在發起請求那一行,將headers=headers改成了headers。

4、上傳的華為雲主機後,不會執行。在尋求同學的幫助後,輸入python3執行python程式。

5、發現有mp4檔案,但是沒有爬到視訊。是因為抖音視訊存放地址一直在變換,過段時間就會失效。還有正確的referer。

五、全課總結


總結與體會:當初選Python課,是因為對此非常感興趣。語法簡單,而且可呼叫的庫有很多。Python是一種解釋語言,開發效率高。老師講課有趣且隨和,課堂上互動很多,給學生親切的感覺。第一節課進行了Python的環境配置與安裝。後面的課程進度較快,由於之前沒有接觸過程式設計,學習起來也是有困難。學習了小遊戲,Socket套接字,還有爬蟲。讓我瞭解到了Python的實用性,在幾次實驗中碰到了許許多多的問題,向同學請教,上網查閱,擴寬了知識面,寫程式碼的過程中,顯現出來的問題很多,一次次實踐讓我學到了不少解決問題的方法。而Python與我們的生活結合度也很高,不只是簡簡單單寫點小程式。作為初學者,我只學到了淺層的一點知識,希望在以後可以深入學習。王老師授課非常的高效,不是隻將知識,而是把更多的時間讓學生自己去練習寫程式碼,在寫的過程中發現問題,逐步理解概念,掌握知識,並學會自己多去問去查。知識太多我沒有全部理解,但已經學到了不少知識。知識的學習都是由淺入深的,先掌握基礎,再根據自己的目標去練習,才會有效果。不斷練習,量變到質變的過程。只有在敲程式碼的過程中才會遇到自己的問題,解決了就提升了。我對Python的學習也僅僅只是它的基礎方面,但Python的強大,卻是足足地吸引著我,希望自己能夠在不斷地學習中,將Python學習的更加好。

建議:Python是公選課,課時仍然非常的少,需要學生課下大量的學習。希望可以在以後增加課時。