1. 程式人生 > >python爬取視訊段段子視覺化介面

python爬取視訊段段子視覺化介面

        Python的用途大家都知道,主要是用來爬蟲,對於的進行分析處理。我這個呢,主要是給大家分享一個爬取視訊段子視覺化下載的方法。望各位道友能夠喜歡。

    視覺化主要用到一個Tkinter庫,大家需要去下載安裝,這個庫很好下載的,網上就用,這裡小編就不多說了。爬取視訊段子呢,我們同樣需要一個視訊地址,還需要一個下載連結。這個個程式碼能,也用到了多執行緒,所以我們還需要掌握一個庫threading。這個下載安裝就行,下面有使用方法。使用多執行緒的話可以使我們下載的速度提升很多。

def get():
    global a    #改變全域性變數
    hd = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    url = 'http://www.budejie.com/video/'+str(a)
    varl.set('已經獲得第%s頁的視訊'%(a))
    html = requests.get(url,headers = hd).text   #傳送get請求,text獲取原始碼
    #print html
    url_content = re.compile(r'(<div class="j-r-list-c">.*?</div>.*?</div>)',re.S)#re.S匹配換行符
    url_contents = re.findall(url_content, html)
    #print url_contents      #視訊名稱視訊地址
    for i in url_contents:
        url_reg = r'data-mp4="(.*?)">'
        url_items = re.findall(url_reg,i)
        #print url_items
        if url_items:#如果有視訊存在,匹配名字,反正不匹配
            name_reg = re.compile(r'<a href="/detail-.{8}?.html">(.*?)</a>',re.S)
            name_items = re.findall(name_reg,i)
            #print name_items
            for i,k in zip(name_items,url_items):
                url_name.append([i,k])
                print i,k
    return url_name

這裡是主要是對視訊的名稱和視訊地址進行處理,用到了正則表示式,相對來說,這裡就是比較難。不過不用擔心,只要用心體會,也能夠理解的。

我們需要使用上面的地址下載視訊我儲存到本地。下面就是程式碼的實現。

id = 1  #視訊個數
def write():
    global id
    while id<10:
        url_name = get()    #呼叫視訊和名字
        for i in url_name:
            urllib.urlretrieve(i[1],'C:\\Users\\ASUS\\Desktop\\txt\\video\\%s.mp4' % (i[0].decode('utf-8').encode('gbk')))    #下載
            text.insert(END,str[id]+'.'+i[1]+'\n'+i[0]+'\n')
            url_name.pop(0) #刪除第一個元素
            id+=1
            varl.set('蘑菇頭:視訊連結和視訊下載完畢')

好了,基本的視訊下載一般就是這樣,但是我這個還有視覺化介面,所以我們還需要另加處理。下載 這個就是視覺化介面的實現。

root = Tk()#展示視窗,例項化一個變數
root.title('視訊爬取視窗')
#root.geometry('+600+500')#座標,大小
text = ScrolledText(root,font=('微軟雅黑',10))#文字滾動條
text.grid()
button = Button(root,text='點選爬取',font =('微軟雅黑',10),command=start)
button.grid()#grid佈局方法
varl = StringVar()
label = Label(root,font=('微軟雅黑',10),fg = 'green',textvariable=varl)
label.grid()
varl.set('準備就緒.........')
root.mainloop()#給視窗傳送一個持續接受的命令

這個介面很容易實現的,只是我們開始時基本都是採用一般爬蟲的方式。所以對這個有點陌生而已。

下面就是完整的程式碼,以及執行出來的結果圖;

# coding=UTF-8

'''
 爬取視訊,GUI圖形使用者介面
 
'''
# 展示GUI介面----Tkingter----ScrolledText

from Tkinter import *
from ScrolledText import ScrolledText
import urllib
import requests
import re  #主要是正則表示式
import threading
import time

url_name = []   #路徑和名字
a = 1     #頁數
def get():
    global a    #改變全域性變數
    hd = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    url = 'http://www.budejie.com/video/'+str(a)
    varl.set('已經獲得第%s頁的視訊'%(a))
    html = requests.get(url,headers = hd).text   #傳送get請求,text獲取原始碼
    #print html
    url_content = re.compile(r'(<div class="j-r-list-c">.*?</div>.*?</div>)',re.S)#re.S匹配換行符
    url_contents = re.findall(url_content, html)
    #print url_contents      #視訊名稱視訊地址
    for i in url_contents:
        url_reg = r'data-mp4="(.*?)">'
        url_items = re.findall(url_reg,i)
        #print url_items
        if url_items:#如果有視訊存在,匹配名字,反正不匹配
            name_reg = re.compile(r'<a href="/detail-.{8}?.html">(.*?)</a>',re.S)
            name_items = re.findall(name_reg,i)
            #print name_items
            for i,k in zip(name_items,url_items):
                url_name.append([i,k])
                print i,k
    return url_name

id = 1  #視訊個數
def write():
    global id
    while id<10:
        url_name = get()    #呼叫視訊和名字
        for i in url_name:
            urllib.urlretrieve(i[1],'C:\\Users\\ASUS\\Desktop\\txt\\video\\%s.mp4' % (i[0].decode('utf-8').encode('gbk')))    #下載
            text.insert(END,str[id]+'.'+i[1]+'\n'+i[0]+'\n')
            url_name.pop(0) #刪除第一個元素
            id+=1
            varl.set('蘑菇頭:視訊連結和視訊下載完畢')

def start():
    th = threading.Thread(target=write)
    th.start()    
            


root = Tk()#展示視窗,例項化一個變數
root.title('視訊爬取視窗')
#root.geometry('+600+500')#座標,大小
text = ScrolledText(root,font=('微軟雅黑',10))#文字滾動條
text.grid()
button = Button(root,text='點選爬取',font =('微軟雅黑',10),command=start)
button.grid()#grid佈局方法
varl = StringVar()
label = Label(root,font=('微軟雅黑',10),fg = 'green',textvariable=varl)
label.grid()
varl.set('準備就緒.........')
root.mainloop()#給視窗傳送一個持續接受的命令

執行結果圖:


注意,我這裡用的是Python2.7,不過也和Python3差不了多少。好了,小編就寫到這裡,以後小編在分享其他的。