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差不了多少。好了,小编就写到这里,以后小编在分享其他的。