Python实现--简易视频爬虫

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python实现--简易视频爬虫相关的知识,希望对你有一定的参考价值。

  最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,使用Python的库Tkinsert做了一个界面,感觉这个库使用起来还是挺方便的,这个程序中使用到了正则表达式(re模块),对爬回的网页进行匹配分析,最后通过urllib模块中urlretrieve()这个方法进行视频的下载,由于存在窗口,防止窗口在下载时候处于卡死状态,使用了threading模块,创建了一个线程去执行下载任务。以下是该程序的源码。

  1 #!/usr/bin/env python
  2 # -*- coding: utf-8 -*-
  3 #coding:utf-8
  4 # @Date    : 2016-12-28 11:18:40
  5 # @Author  : Donoy ([email protected])
  6 # @Link    : http://www.cnblogs.com/Donoy/
  7 # @Version : $Id$
  8 
  9 #多线程 爬虫 
 10 #GUI 界面
 11 
 12 import os
 13 import requests
 14 import re
 15 import threading
 16 from   Tkinter import *
 17 from   ScrolledText import ScrolledText #文本滚动框
 18 import urllib #这个模块中有下载的功能
 19 import sys
 20 #sys 模块的输出编码 格式
 21 reload(sys)
 22 sys.setdefaultencoding(utf-8)
 23 Video_Data = []
 24 
 25  
 26 def creatWnd():
 27     global root 
 28     global varl 
 29     global text
 30 
 31     #创建一个窗口
 32     root = Tk() # 窗口
 33 
 34     #窗口的标题
 35     root.title(DSpider)
 36     #文本滚动窗口
 37     text = ScrolledText(root,font=(微软雅黑))
 38     text.grid()
 39 
 40     #设置Lable
 41     varl = StringVar()
 42     lable = Label(root,font=(微软雅黑),fg=red,textvariable=varl)
 43     lable.grid()
 44     varl.set(Fight......)
 45 
 46     #设置按钮
 47     button = Button(root,text=开始爬取,font=黑体,command=begin_Thread)
 48     button.grid()
 49 
 50     #root.mainloop()     # 显示窗口
 51 
 52 def getHtmlData(url):
 53     #print html.text               # 网站的内容
 54     #print html.status_code        # 请求的返回值
 55     RequestHeader = { 
 56            User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36
 57     }
 58     html  =  requests.get(url,headers=RequestHeader)
 59     #print html.text
 60     return html.text
 61 
 62 
 63 def getVideoUrl(html):
 64     #re.S 是匹配换行符 
 65     Parse   = re.compile(r(<div class="j-r-list-c">.*?</div>.*?</div>),re.S)
 66     context = re.findall(Parse,html)
 67     Parse   = re.compile(rdata-mp4="(.*?)")
 68     for item in context:
 69         VideoUrl  = re.findall(Parse,item)
 70         if VideoUrl:
 71             Name_Parse = re.compile(r(<a href="/detail-.{8}.html">(.*?)</a>),re.S);
 72             VideoName  = re.findall(Name_Parse,item) 
 73             for Name,url in zip(VideoName,VideoUrl): #zip这个内置函数就是将List重新整合一下
 74                 Video_Data.append([Name,url])
 75                 
 76 
 77 def begin_Thread():
 78     try:
 79         for i in range(10,12):
 80             url = http://www.budejie.com/%d%i
 81             html = getHtmlData(url)
 82             getVideoUrl(html)    
 83     except Exception as e:
 84         raise
 85     varl.set(一共%s个小视频,现在开始下载......%(len(Video_Data)/2))
 86     thread = threading.Thread(target= myThread)
 87     thread.start()
 88 
 89 
 90 def myThread():
 91     id = 1
 92     for Data in Video_Data:
 93         text.insert(END,str(id)+.+Data[0][1]+Data[1]+\\n)
 94         urllib.urlretrieve(Data[1],%s.mp4%Data[0][1].decode(utf-8).encode(gbk))
 95         Video_Data.pop(0)
 96         id += 1
 97     varl.set(所有的视频都下载完成)    
 98         
 99 
100 
101 def main():
102     creatWnd()
103     root.mainloop()
104 
105 
106 if __name__ == __main__:
107     main()
108     
109 
110     

 

以上是关于Python实现--简易视频爬虫的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫学习笔记-M3U8流视频数据爬虫

Python实现简易Web爬虫详解

编写Python爬虫的简易流程描述

Python简易 爬虫+图形化界面

Python简易爬虫爬取百度贴吧图片

简易python爬虫爬取boss直聘职位,并写入excel