1. 程式人生 > >十五行程式碼爬取百思不得姐網站數百視訊

十五行程式碼爬取百思不得姐網站數百視訊

看完這個爬蟲教學視訊,親自實驗了一下,提取視訊關鍵內容,得出此文。

用不超過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 
版權宣告:本文為博主原創文章,轉載請附上博文連結!