十五行程式碼爬取百思不得姐網站數百視訊
看完這個爬蟲教學視訊,親自實驗了一下,提取視訊關鍵內容,得出此文。
用不超過15行程式碼爬取百思不得姐網站上的視訊:
爬取地址:http://www.budejie.com/video/
我需要下載的視訊就是如下圖所示:
這是video頁面的一部分,每一頁有20個視訊,準備以下載前20頁為例:
先分析一下第一頁網頁原始碼,ctrl+F搜尋"騎摩托穿梭于越南街頭是種什麼感受?",找到第一個視訊的下載地址:(如下圖所示)
下面編寫程式碼,下載這個頁面的所有"data-mp4=..."的視訊
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re #正則
req = urllib2.Request('http://www.budejie.com/video') #請求頁面
# 加一個鍵值對,針對伺服器的反爬機制
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
html = urllib2.urlopen(req).read()
reg = r'data-mp4="(.*?)"' #r目的是以原生字串轉義,不會改變類似於"\n"這樣的字串
for i in re.findall(reg, html): #找到視訊地址
filename = i.split("/")[-1] #提取出檔名
print "正在下載%s" %filename
urllib.urlretrieve(i, "down_mp4/%s" %filename) #下載
print filename+"下載成功"
print "下載完成"
執行程式碼結果如下圖:
那麼第一頁的20個視訊都下載完成了,但是我希望下載前20頁視訊,所以把上面程式碼寫成一個函式,呼叫20次就行了,每一次給函式傳遞頁碼就行了,因為百思不得姐的視訊第二頁的網址是
http://www.budejie.com/video/2
所以每次改變1-20就行了。
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re #正則
def getVideo(page):
req = urllib2.Request('http://www.budejie.com/video/%s' %page) #請求頁面
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
html = urllib2.urlopen(req).read()
reg = r'data-mp4="(.*?)"' #正則表示式
for i in re.findall(reg, html): #找到視訊地址
filename = i.split("/")[-1] #視訊檔名
print "正在下載%s" %filename
urllib.urlretrieve(i, "down_mp4/%s" %filename) #下載到與py檔案同目錄下的down_mp4資料夾
for i in range(1,21): #以下載前20頁為例
getVideo(i)
執行程式碼結果如下圖:
PS:本文僅用於爬蟲實驗,不用於盜取該網站視訊,下載之後即刪除。
---------------------
作者:popma98
來源:CSDN
原文:https://blog.csdn.net/qq_33639867/article/details/54890442
版權宣告:本文為博主原創文章,轉載請附上博文連結!