强迫症终结版 - 蹩脚梨视频下载器

支持功能:

  • 自己选择要下载的视频分类
  • 视频个数(12的倍数,最新的...个)(不要怪不能高度自定义啦~)
  • 重复文件自动跳过
  • 菜单会被控制台打印顶掉,大家见谅(才疏学浅 暂不知道咋改(等视频都下完了再打印菜单))

哎,舒服了~

强调:仅供学习练习用,请不要乱来

# 把文件名搞一下
import re
import os
import requests
from concurrent.futures import ThreadPoolExecutorclass PearDownLoader:def __init__(self, page_url, params, headers, cookie=None, video_page_target_str_prefix=None,video_page_target_re=None, video_target_re=None, video_name_re=None, video_directory=None):self.headers = headersself.cookie = cookieself.url = page_urlself.params = paramsself.video_page_target_str_prefix = video_page_target_str_prefixself.video_page_target_re = video_page_target_reself.video_target_re = video_target_reself.video_name_re = video_name_reself.video_directory = video_directoryself.pool = ThreadPoolExecutor()def get_video_page_urls(self):res = requests.get(self.url, params=self.params, headers=self.headers)video_page_target_str_list = re.findall(self.video_page_target_re, res.text)urls_list = [self.video_page_target_str_prefix + video_page_target_str for video_page_target_str invideo_page_target_str_list]print(urls_list)# 至此,已经获取到了推送的几条视频连接地址return urls_listdef get_video_urls(self, video_page_urls):videos_list = []for video_page_url in video_page_urls:res = requests.get(video_page_url, headers=self.headers)# 获取视频链接video_target_url = re.findall(self.video_target_re, res.text)[0]# 获取视频名称video_name = re.findall(self.video_name_re, res.text)[0]video_dic = {"video_target_url": video_target_url,"video_name": video_name,}# print("video_dic:", video_dic)# 组织成 [{url: "filename"}] 的形式videos_list.append(video_dic)return videos_listdef download_videos(self, videos_list):# 先判断有没有传参数,没有给个默认的if not self.video_directory:self.video_directory = os.path.join(os.path.dirname(__file__), 'pear_download_videos')# 按分类创文件夹存储视频download_category_name = video_category_dic.get(str(self.params.get('categoryId')), 'unknow_category')self.video_category_directory = os.path.join(self.video_directory, download_category_name)# 判断该路径存不存在,不存在创建一下if not os.path.exists(self.video_category_directory):os.makedirs(self.video_category_directory)# 用多线程去下载for video_dic in videos_list:# self.pool.submit(download_video_by_thread, self, video_dic)self.pool.submit(self.download_video_by_thread, video_dic)def download_video_by_thread(self, video_dic):file_name = video_dic.get('video_name', 'video_target_url')absolute_file_path = os.path.join(self.video_category_directory, file_name + '.mp4')# 得到视频内容,写到文件中if os.path.exists(absolute_file_path):print(f"【{file_name}】 已存在,跳过下载...")return Noneprint(f"【{file_name}】 start download ...")video_url = video_dic.get('video_target_url')res = requests.get(video_url, headers=self.headers)with open(absolute_file_path, 'wb') as f:for line in res.iter_content():f.write(line)print(f"【{file_name}】 download compelete...")# 一步调用,把上面几个歩鄹合到一起(保留三个歩鄹便于查看每一步的执行结果,排错)def easy_get_videos(self):video_page_urls = self.get_video_page_urls()videos_list = self.get_video_urls(video_page_urls=video_page_urls)self.download_videos(videos_list=videos_list)if __name__ == '__main__':# 视频分类video_category_dic = {"1": "社会","2": "世界","3": "财富","4": "娱乐","5": "生活","6": "美食","8": "科技","9": "体育","10": "新知","31": "汽车","59": "音乐","8889": "旗帜",}# 准备参数url = "https://www.pearvideo.com/category_loading.jsp"params = {"reqType": 5,  # 字符串和数字都要 html 转码,区别不大"categoryId": 8,  # 梨视频 科技 频道"start": 0,  # 0 是懒加载的第一个视频}headers = {"Referer": "https://www.pearvideo.com/category_8","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",}video_page_target_str_prefix = "https://www.pearvideo.com/"video_page_target_re = '<a href="(.*?)" class="vervideo-lilink actplay">'video_target_re = ',srcUrl="(.*?)"'video_name_re = '<h1 class="video-tt">(.*?)</h1>'video_directory = os.path.join(os.path.dirname(__file__), 'pear_download_videos')pear_downloader = PearDownLoader(url, params, headers, video_page_target_str_prefix=video_page_target_str_prefix,video_page_target_re=video_page_target_re, video_target_re=video_target_re,video_name_re=video_name_re, video_directory=video_directory)while True:while True:print("现有如下视频分类可选择:")for key, value in video_category_dic.items():print(f"{key}.{value}", end='\t')want_video_type = input("\n请输入您要下载的视频类型编号:").strip()if want_video_type in video_category_dic:want_video_category_id = int(want_video_type)breakprint("您输入的编号有误,请重新输入!")while True:want_video_pear_count = input("请输入您要下载的视频数量:12 * ").strip()if want_video_pear_count.isdigit():want_video_pear_count = int(want_video_pear_count)breakprint("请输入合法数字!")# 开始分批下载try:for i in range(want_video_pear_count):pear_downloader.params['categoryId'] = want_video_category_idpear_downloader.params['start'] = pear_downloader.params['start'] + 12pear_downloader.easy_get_videos()except Exception as e:pear_downloader.pool.shutdown()  # 关闭池子且等待池子中所有的任务运行完毕print(e)

强迫症终结版 - 蹩脚梨视频下载器(很菜勿喷)相关推荐

  1. Linux版 乐影音下载器(视频下载器) 使用方法

    如果你不知道Linux为何物,那么请回去选择前两种下载方式之一. 只提供Linux 64位的乐影音下载器(点击下载),在Linux Mint 19.1  64位.Python 3.6环境下测试能正常运 ...

  2. videoder有什么用_videoder下载-videoder视频下载器windows版下载-西西软件下载

    videoder视频下载器是一款功能强大的视频解析下载工具,支持各大视频播放平台,支持全部分辨率的视频下载,本次放出videoder Windows版本下载,分为32位和64位,安装前请先确认自己的P ...

  3. 手机版m3u8合并器_100行代码,打造自己的视频下载器

    编者的话:    hello,小伙伴们.我是"风尘",今天又来给大家分享知识啦.为了提起大家对编程的兴趣,今天给大家带来一个用python语言编写的视频下载器.让互联网上的视频&q ...

  4. 4K网络视频下载器:4K Video Downloader mac汉化教程

    4K Video Downloader for Mac版是一款4K网络视频下载器,现在我们的视频除了1080P还有4K超高清视频品质的影片,但是随着视频文件的扩大,下载速度却跟不上,这成了一个很大的问 ...

  5. 【Python工具】Python实现一款支持各大平台的视频下载器 | 附源码

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复视频下载器 简介 一 ...

  6. 好用的Mac视频下载器:Allavsoft for Mac中文版

    Allavsoft for Mac是Mac平台上一款全能的视频下载器,allavsoft中文版可以轻松下载MP4.M4A.FLV.HTML5.AAC等格式的视频,支持在iPad.iPhone.iPod ...

  7. You-Get, Annie 视频下载器 一键安装脚本

    受限于 CSDN 的审核,本文章以后不再跟进更新.最后编辑于 2020-04-10 . 视频下载器 一键配置脚本 (Windows) 快速配置和使用 You-Get , *******-dl , An ...

  8. 优酷视频下载器 优酷视频下载方法

    iku爱酷V2.1版优酷视频加速器下载优酷视频下载器 iku爱酷V2.1版优酷视频加速器. 视频加速器播放速度更快!下载速度更快!旋风般的加速感觉! 视频下载看下载优酷站内视频,充分满足你的收藏欲. ...

  9. js 防止恶意刷新_【js脚本】短视频下载器 2.5 更新

    最近某短视频下载失效,基本所有规则和脚本都无法下载他家的无水印,这里我就不说是谁了,不然又给我发警告函律师函什么的.所有这里就不放出规则版的了,可以使用别人做的,看见今天也有其他人更新.如果你喜欢用小 ...

最新文章

  1. centos7 firewall 防火墙 命令
  2. atcoder题目合集(持续更新中)
  3. 9.控制流语句_for循环
  4. centos linux 禁止ping
  5. DDD中的聚合和UML中的聚合以及组合的关系
  6. html隐藏层点击显示不出来,[js+css]点击隐藏层,点击另外层不能隐藏原层
  7. 1.3编程基础之算术表达式与顺序执行 11 计算浮点数相除的余数
  8. 交互系统的构建之(三)TTS语音合成的加盟
  9. web_find()函数检查中文字符串失败的处理方法
  10. 【乘风破浪的开发者】丁一超:从AI实战营出发探索未知的AI世界
  11. unittest和另一个可用单元测试框架nosetest
  12. 水很深的深度学习-Task05循环神经网络RNN
  13. Chrome Frame
  14. 随机手机号查询易语言代码
  15. Java判断质数(素数)
  16. html5 java文件上传插件_5个最佳的javascript文件上传插件
  17. 《马克思主义基本原理》复习整理
  18. 时空跳跃者的魔法(codevs3315)
  19. php yaf twig,GitHub - cheerego/happy_yaf: 搭建一个可用的Yaf,包括Laravel的Eloquent ORM、Twig、脚手架、Whoops和使用用例...
  20. scala特质 对比java的接口 使用方法

热门文章

  1. 利用谷歌镜像网站编辑Latex的参考文献与doi链接
  2. 入门文献复现——Murphy C K——Combining belief functions when evidence conflicts
  3. 基于无人机摄影测量技术的桥梁检测
  4. [数学建模] 微分方程--捕鱼业的持续发展
  5. HTML点击图片实现跳转的两种方法
  6. html页面记录访问次数
  7. 一款超好用的开源密码管理器?
  8. python运行调出控制台_python控制台怎么打开
  9. 华为服务器centos安装系统版本,华为服务器安装centos7.4
  10. IG541与七氟丙烷灭火系统到底有什么不一样呢?