码迷,mamicode.com
首页 > 编程语言 > 详细

Python实现--【简易】视频爬虫

时间:2016-12-29 08:01:15      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:lte   set   insert   lin   targe   []   做了   threading   creat   

  最近这几天,学习了一下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 (172829352@qq.com)
  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实现--【简易】视频爬虫

标签:lte   set   insert   lin   targe   []   做了   threading   creat   

原文地址:http://www.cnblogs.com/Donoy/p/6231246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!