簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻

簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻


基本步驟與準備工作

簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻

調試環境:

pycharm+python3

需要庫:

  • urllib.
  • request
  • re

(http.cookiejar 後續爬蟲進場會使用到的庫,本項目反爬不涉及所以可以不添加)

如果import過程顯示沒有上述庫,可以通過文件→設置→projet interpreter中右側點擊+來添加(如果您使用anaconda或者python也可以直接運行本項目,通過cmd→pip install添加)

2.在本文中我們通過python對於在線的短視頻進行爬取,下載存儲。基本步驟如下(可以寫註釋梳理思路):

(1)分析頁面URL和視頻文件URL特徵 (2)獲取網頁源代碼HTML,解決反爬機制 (3)批量下載視頻存儲

分析頁面URL與文件URL特徵

簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻

1.分析網頁URL

通過網頁網址:http://www.budejie.com/video/1,我們可以發現針對不同頁碼變化的知識網址最後一個數值,而這個數值代表了頁數,所以只需要改變為固定網址+變量的形式批量獲取該站的網址URL

2.分析文件名URL

通過對於網頁當中的mp4的文件名進行分析,發現文件的URL是明文顯示的,所以通過re的正則可以匹配獲取。

批量獲取URL,並從中提取視頻的URL

import urllib.request

import re

for page in range (1,20):

req = urllib.request.Request("http://www.budejie.com/video/%s" % page)

html = urllib.request.urlopen(req).read()

html = html.decode('UTF-8')

print(html)

1.批量爬取網頁URL

這裡我們page變量代表頁面的編碼,從這裡我們暫時先爬取前20頁。

(1)req獲取網頁反饋 (2)html通過函數獲取網頁的元代碼 (3)通過對於源代碼UTF-8編碼恢復中文的顯示。

但是通過上述代碼的執行發現錯誤顯示http Error 403,因為網頁的反爬機制不能獲取。

2.通過頁面增加頭文件

我們通過谷歌瀏覽器訪問頁面,按F12並切換到Network,刷新界面觀察訪問進程,可以從進程文件中選取一個查看頭文件,添加到代碼中,(這裡選取的baisibudejie.js)修改代碼如下,可以正常爬取界面。

for page in range (1,20):

req = urllib.request.Request("http://www.budejie.com/video/%s" % page)

req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")

html = urllib.request.urlopen(req).read()

html = html.decode('UTF-8')

print(html)

批量下載視頻,並建立文件名存儲

簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻


簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻

1.建立循環結構批量命名

建立循環結構之後,需要保留文件名下載,i.split("/")[-1]的含義是將i進行分割,以‘/’為分割符,保留最後一段,即MP4文件名。

2.批量下載

還是需要加一句顯示的輸出語句,來表示進程,也符合一個程序的交互性,也就是下載到那個視頻的時候顯示一下進度,最後下載到一個mp4的文件夾內

for i in re.findall(reg, html):

filename = i.split("/")[-1] # 以‘/ ’為分割f符,保留最後一段,即MP4的文件名

print('正在下載%s視頻' % filename)

urllib.request.urlretrieve(i, "mp4/%s" % filename)

1.建立完整程序

作為一名合格的程序員,需要梳理程序,添加註釋,便於理解和後續的修改

import urllib.request

import re

def getVideo(page):

req = urllib.request.Request("http://www.budejie.com/video/%s" %page)

req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")

html = urllib.request.urlopen(req).read()

html = html.decode('UTF-8')

reg = r'data-mp4="(.*?)"'

for i in re.findall(reg,html):

filename = i.split("/")[-1]#以‘/ ’為分割f符,保留最後一段,即MP4的文件名

print ('正在下載%s視頻' %filename)

urllib.request.urlretrieve(i,"mp4/%s"%filename)

for i in range (1,20):


獲取方式:請大家轉發本文+關注並私信小編 “ 資料 ”,即可獲取。


簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻


簡短的爬蟲程序,14行Python代碼輕鬆實現爬取網站視頻

獲取方式:請大家轉發本文+關注並私信小編 “ 資料”,即可獲取。


分享到:


相關文章: