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


猜你喜欢

转载自blog.csdn.net/zjy18886018024/article/details/80014302
今日推荐