送給Python小白學習爬蟲的小專案

il_持之以恆_li發表於2020-04-12

原標題:運用Python爬蟲下載熊貓辦公上面的視訊模板和音效

1.怎樣實現

1.1 需要的模組

requests(urllib亦可)、bs4、os、time、sys
前兩個模組都需要額外安裝,後面模組是Python自帶的,我們按住win+R,在彈出來的視窗中輸入cmd,來到命令視窗,輸入下面語句即可安裝
requests: pip install requests
bs4:pip install bs4
如果在執行小編的程式碼的時候出現如下報錯
在這裡插入圖片描述
建議安裝lxml :pip install lxml,就不會出現錯誤了。

1.2 實現

我們來到這個網址:
https://www.tukuppt.com/videomuban/xuexi.html
這就是視訊模板的介面,我輸入的是有關 學習 型別的視訊模板,這個網址其實有兩部分組成的,第一就是模板型別,在這個網址中是 videomuban,另一部分是 xuexi 在這裡是這個模板下面的型別。
在這裡插入圖片描述
我們要做的就是下載這個網址下面的視訊,通過按電腦鍵盤F12來到開發者工具,可以發現這些視訊下載連結都在這個div.b-box標籤下面:
在這裡插入圖片描述
我們只需得到這個標籤下面的內容即可。
程式碼實現:

def get_video(name):
    url='https://www.tukuppt.com/videomuban/%s.html'%name
    responce=requests.get(url=url)
    soup=BeautifulSoup(responce.text,'lxml')
    list1=soup.select('div.b-box>dl')    # 列表
    list2=[]    # 用於儲存視訊連結的列表
    list3=[]

    for i in range(len(list1)):
        str1='http:'+list1[i].select('dd>a>video')[0]['src']   # 一個視訊的下載連結
        list2.append(str1)
        str2=list1[i].select('dt.title')[0].get_text()   # 視訊的名稱
        list3.append(str2)
        print('->【{}】----{}'.format(i+1,str2))

    str_id=input('------>請輸入你想下載的視訊序號(可輸入一連串序號,中將用","隔開):')
    id=[int(i) for i in str_id.split(',')]

    for i in id:
        cb=requests.get(url=list2[i-1]).content    # 用來得到視訊的二進位制檔案 c content b 二進位制
        with open(file='./{}/{}.mp4'.format(name,list3[i-1]),mode='wb') as f:
            f.write(cb)
        Time_1()
        print('--->一下載{}.mp4完畢!'.format(list3[i - 1]))

這是一個自定義的方法,傳入的引數就是自己輸入的名稱,在這裡就是上面 輸入的 xuexi(學習)
,這裡面有一個Time_1()方法,是用來顯示進度條的。
Time_1()方法:

def Time_1():     # 進度條函式
    for i in range(1,101):
        sys.stdout.write('\r')
        sys.stdout.write('{0}%|{1}{2}'.format(i,int((i%101)/2)*'-','>'))
        sys.stdout.flush()
        time.sleep(0.05)
    sys.stdout.write('\n')

下載音效嗎?跟上面的過程一樣,我就不詳細講了,
實現程式碼:

def get_yin(name1):

    url='https://www.tukuppt.com/yinxiaomuban/%s.shtml'%name1
    responce=requests.get(url=url).text
    soup=BeautifulSoup(responce,'lxml')
    list1=soup.select('div.b-box>dl')
    list2=[]
    list3=[]

    for i in range(len(list1)):
        url='http:'+list1[i].select('audio>source')[0]['src']   # 音訊下載連結
        name=list1[i].select('dt>a')[0].get_text()
        list2.append(url)
        list3.append(name)
        print('--->【{}】-{}'.format(i+1,name))

    str_id = input('------>請輸入你想下載的視訊序號(可輸入一連串序號,中將用","隔開):')
    id = [int(i) for i in str_id.split(',')]

    for i in id:
        cb = requests.get(url=list2[i - 1]).content  # 用來得到視訊的二進位制檔案 c content b 二進位制
        with open(file='./{}/{}.mp3'.format(name1,list3[i - 1]), mode='wb') as f:
            f.write(cb)
        Time_1()
        print('--->一下載{}.mp3完畢!'.format(list3[i - 1]))

另外,在這個了我還定義了一個方法,主要用來建立檔案的

def get_name():
    name=input('請輸入你想下載模板的名稱(拼音):')
    try:
        os.mkdir('./{}'.format(name))
    except:
        sys.exit()    # 如果程式出錯,直接退出程式
    return name

不過這裡輸入的要是拼音,切記!

2.最終程式碼

完整我已經上傳到github,l連結為:ppt.py
執行結果:
在這裡插入圖片描述
在這裡插入圖片描述
下載完成之後,會在同一個資料夾下面多出資料夾,所下載的內容就在這個資料夾下面,
如:
在這裡插入圖片描述
在這裡插入圖片描述

3.總結

這個專案比較簡單,希望那些python小白們能看懂,如果覺得可以,記得給我點一個小小的贊,我會更加努力地推出新的博文的。

相關文章