python爬虫脚本下载YouTube视频

爬虫
python
YouTube视频

工作环境:

  • python 2.7.13

  • pip

  • lxml, 安装 pip install lxml,主要用xpath查找节点,可以使用re模块代替

  • pytube, 安装 pip install pytube

  • ***工具

参考:

源码:

  1. # coding: utf-8 

  2. __author__ = "zwzhou" 

  3. __date__ = "2017-03-19" 


  4. import urllib2 

  5. from pytube import YouTube 

  6. from pprint import pprint 

  7. from lxml import etree 

  8. import sys,getopt 


  9. def getHtml(url): 

  10. user_agent='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1284.0 Safari/537.13' 

  11. headers={'User-Agent':user_agent} 

  12. request=urllib2.Request(url,headers=headers) 

  13. response=urllib2.urlopen(request) 

  14. html=response.read() 

  15. return html 


  16. def getUrl(html): 

  17. global savepath 

  18. global maxNumber 

  19. global timeThreshold 

  20. global cur_count 

  21. global videoLists 

  22. tree=etree.HTML(html) 

  23. urllist=tree.xpath(u'//div[@class="thumb-wrapper"]/a/@href') 

  24. #print urllist 

  25. urllist_time=tree.xpath(u'//div[@class="thumb-wrapper"]/a/span/span/text()') 


  26. baseurl=r'https://www.youtube.com' 

  27. for (item_name,item_length) in zip(urllist,urllist_time): 

  28. #print item_name 

  29. #print item_length 

  30. try: 

  31. yt = YouTube(baseurl+item_name) 

  32. except: 

  33. print "Some thing wrong about the authority" 


  34. print("video name:"+yt.filename) 

  35. print("video time:"+item_length) 

  36. if yt.filename in videoLists: # 文件已经存在 

  37. print "This video has been downloaded!" 

  38. else: 

  39. if checktime(item_length): 

  40. video = yt.filter('mp4')[-1] 

  41. print("Now is loading %s------------>"%yt.filename) 

  42. video.download(savepath) 

  43. print("--------------->%sVideo is loaded!"%yt.filename) 

  44. cur_count+=1 

  45. videoLists.append(yt.filename) 

  46. if cur_count >= maxNumber:# 达到要求 

  47. print('There are %d videos downloaded!This task is completed!'%maxNumber) 

  48. # TODO: if necessary, the videoLists can be logged 

  49. sys.exit()  

  50. else: 

  51. print 'This video is too long and it will not be downloaded, just be ignored!' 

  52. if urllist: 

  53. getUrl(baseurl+urllist[0]) #下一个页面 



  54. def checktime(timelength): 

  55. global timeThreshold 

  56. strs=timelength.split(':') 

  57. time =int(strs[0])*60+int(strs[1]) 

  58. if time< timeThreshold: 

  59. return True 

  60. else: 

  61. return False 


  62. def usage(): 

  63. print ''' 

  64. usage: python dl_youtube [option] [arg] 

  65. options and args: 

  66. -s : download path 

  67. -t : time threshold of the video to be loaded, in seconds 

  68. -u : start url which to be crawled, it can be set more than one time 

  69. -n : when downloading is stop, i.e. how many videos will be downloaded, default is 10000. 

  70. -h : print this help message 

  71. ''' 


  72. if __name__ == "__main__": 

  73. start_urls=['https://www.youtube.com/watch?v=TThzH_sJo6o'] 

  74. videoLists=[] # 保存文件名,防止重复下载 

  75. # 初始值 

  76. savepath=r"D://MyDownloads" 

  77. maxNumber=10000 

  78. timeThreshold=240 

  79. cur_count=0 


  80. opts,args=getopt.getopt(sys.argv[1:],'hs:t:n:u:') 

  81. for op,value in opts: 

  82. if op == "-s": # 下载路径,如默认 D://MyDownloads 

  83. savepath=value 

  84. elif op == '-t': # 时常限制,默认240s 

  85. timeThreshold =int(value) 

  86. elif op == "-h": # help 

  87. usage() 

  88. sys.exit() 

  89. elif op == '-n': 

  90. maxNumber=int(value) 

  91. elif op == '-u': # 初始的搜索链接 

  92. start_urls.append(value) 


  93. for item in start_urls: 

  94. html = getHtml(item) 

  95. getUrl(html) 


使用

  1. python dl_youtube.py -n 10 -s D://MyDownloads -t 600 -u https://www.youtube.com/watch?v=TThzH_sJo6o 

将从页面 https://www.youtube.com/watch?v=TThzH_sJo6o 开始搜索下载10段时长小于6分钟的video保存到D://MyDownloads文件夹中。

python爬虫脚本下载YouTube视频的更多相关文章

  1. 使用python+ffmpeg+youtube-dl下载youtube上的视频

    一.准备工作 1.安装python,详见https://www.cnblogs.com/cnwuchao/p/10562416.html 2.安装ffmpeg,详见https://www.cnblog ...

  2. python爬虫之下载文件的方式总结以及程序实例

    python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...

  3. Mac电脑如何快速下载YouTube视频

    如果你想下载一些教育类的视频资源,或者是一些学习的教程,那么YouTube是一个很好的视频资源平台.YouTube上面各种各样的资源都有,而且质量都很有保证,尤其是那些订阅量很多的人.可惜的是,You ...

  4. 使用在线工具下载YouTube视频

    YouTube上面有数不尽的视频资源,很多人都想从上面下载自己喜欢的视频,但是不得其法.那么,究竟怎样从YouTube上面下载视频呢?其实,一点也不难.只要你在Google上面搜索free youtu ...

  5. 安卓手机下载YouTube视频的3种方法

    作为全球最大的在线视频网站,YouTube上面的内容可真是应有尽有啊,从教学视频到个人手工艺品制作流程,从各种搞笑视频到电视连续集等等,包罗万象.如果你想下载YouTube视频到电脑上面的话,网上有很 ...

  6. Python:使用youtube-dl+ffmpeg+FQ软件下载youtube视频

    声明:本文所述内容都是从http://blog.csdn.net/u011475134/article/details/71023612博文中学习而来. 背景: 一同学想通过FQ软件下载一些youtu ...

  7. python下载youtube视频

    谷歌开源了一个新的数据集,BoundingBox,(网址在这里)这个数据集是经过人工标注的视频数据集,自然想将它尽快地运用在实际之中,那么首先需要将其下载下来:可以看到网址上给出的是csv文件,该文件 ...

  8. Python 爬虫——抖音App视频抓包

    APP抓包 前面我们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取.现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视 ...

  9. Python 爬虫批量下载美剧 from 人人影视 HR-HDTV

    本人比較喜欢看美剧.尤其喜欢人人影视上HR-HDTV 的 1024 分辨率的高清双字美剧,这里写了一个脚本来批量获得指定美剧的全部 HR-HDTV 的 ed2k下载链接.并依照先后顺序写入到文本文件, ...

随机推荐

  1. ios开发 内测包添加测试UDID

    内侧包添加 UDID: 1.蒲公英获取设备UDID  https://www.pgyer.com/udid 2. 登录开发者中心   --> Certificates, Identifiers ...

  2. Currency Exchange---poj1860 ( spfa, 回路,最长路)

    题目链接:http://poj.org/problem?id=1860 题解: 两种情况YES,一种是存在正权回路: 一种是求最长路后,实现了增值,也是YES: 用spfa来判断是否存在正权回路,其实 ...

  3. 用 chown 和 chmod 修改目录所属用户及权限

    1.修改 tmp 目录所属用户为 root,用户组为 root chown -R root:root /tmp12.修改 tmp 目录为可写权限 chmod -R 777 /tmp

  4. python之WebSocket协议

    一.WebSocket理论部分 1.websocket是什么 Websocket是html5提出的一个协议规范,参考rfc6455. websocket约定了一个通信的规范,通过一个握手的机制,客户端 ...

  5. 运行HBase应用开发程序产生异常,提示信息包含org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory的解决办法

    Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties Exception in thread ...

  6. libgomp-4.8.5-28.el7_5.1.x86_64 is a duplicate with libgomp-4.8.5-4.el7.x86_64

    列出重复的包 # package-cleanup --dupes 删除重复的包 # package-cleanup --cleandupes

  7. 牛客国庆集训派对Day6 Solution

    A    Birthday 思路:设置一个源点,一个汇点,每次对$源点对a_i, b_i , a_i 对 b_i 连一条流为1,费用为0的边$ 每个点都再连一条 1, 3, 5, 7, ....的边到 ...

  8. 2017 ACM/ICPC Asia Regional Qingdao Online Solution

    A : Apple 题意:给出三个点,以及另一个点,求最后一个点是否在三个点的外接圆里面,如果在或者在边界上,输出“Rejected”,否则输出"Accepted" 思路:先求一个 ...

  9. Linux内核分析06

    进程的描述和进程的创建 一,进程的描述 进程控制块PCB——task_struct (进程描述符),为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struc ...

  10. 20159212杨翔实验一(熟悉Java开发环境)实验报告

     实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验步骤与体会 一.命令行下Java程序开发 1.操作过程     在虚拟环境中 ...