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