python爬取視訊段段子視覺化介面
阿新 • • 發佈:2019-01-02
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差不了多少。好了,小編就寫到這裡,以後小編在分享其他的。