用python制作个视频下载器
前言
某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~
当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而生:“生活已然很无聊,不如再无聊些叭”。
于是,我决定开一个专题,便称之为kimol君的无聊小发明。
妙…啊~~~
众所周知,视频是一个学习新姿势知识的良好媒介。那么,如何利用爬虫更加方便快捷地下载视频呢?本文将从数据包分析到代码实现来进行一个相对完整的讲解。
一、爬虫分析
本次选取的目标视频网站为某度旗下的好看视频:
https://haokan.baidu.com
1.视频搜索
进入主页后,我们可以看到一个搜索框历历在目:
当我们点击搜索按钮之后,会出现与关键字(ps.这里要考,大家仔细看"_blank" href="https://www.jb51.net/softs/107060.html">Fiddler或者Burpsuit等),当然也可以选择浏览器自带的调试工具(在浏览器中按F12即可打开)。
在这里我选择了后者,打开F12调试工具,选择网络:
在点击搜索按钮之后我们可以看到相应的网络请求出现在下面的工具框中:
通过简单的查找之后我们可以很容易地发现对应的搜索请求(红框标出部分),其对应的地址为:
https://haokan.baidu.com/videoui/page/search"htmlcode">import requests res = requests.get('https://haokan.baidu.com/videoui/page/search"text-align: center">很显然,这里返回的是一个HTML格式的数据,我们只需要通过re库或是bs4库等将我们需要的数据提取出来即可。至此,关于视频搜索的分析基本算是完成了。
然而!细心的小伙伴会发现,我们现在可以获得搜索结果,但是没办法选择页面呀。对嚯~那咋办呀?同样,我们继续抓包分析不就可以了嘛~ 我倒要看看你是怎么翻页的。果然,下滑鼠标之后我们得到了新的请求:
其请求地址变为了:
https://haokan.baidu.com/videoui/page/search"htmlcode">import requests page = 1 keyword = 'xxxxx' # xxxxx为搜索的关键字 url = 'https://haokan.baidu.com/videoui/page/search"text-align: center">右键视频播放页面查看源码(或者通过右键视频检查元素也可),我们可以找到视频播放的src,其对应的正则表达式为:
上一篇:matplotlib部件之矩形选区(RectangleSelector)的实现p = '<video class="video" src=(.*"htmlcode">def get_videoUrl(vid): ''' 提取视频信息中的视频源地址 ''' res = requests.get('https://haokan.baidu.com/v"video" src=(.*"htmlcode">def download_video(vid): ''' 下载视频文件 ''' savePath = 'xxxxx.mp4' # 定义存储的文件名 videoUrl = get_videoUrl(vid) # 获取视频下载地址 res = requests.get(videoUrl) with open(savePath,'wb') as f: f.write(res.content)至此,我们已经可以根据关键字搜索相关的视频,并且可以把视频下载到本地了。这也意味着:关于本次视频下载爬虫的介绍也就结束了,剩下的就是根据自己实际需求对代码进行包装即可。
二、我的代码
这里提供一个我自己的代码,仅供参考:
# ============================================================================= # 好看视频_v0.1 # ============================================================================= import re import os import time import queue import requests import threading import pandas as pd class Haokan: def __init__(self): self.url = 'https://haokan.baidu.com/videoui/page/search"第%d页"爬取完成!'%(p+1)) self.result = pd.DataFrame(self.result) self.result.to_excel('%s.xlsx'%keywords,index=False) # 定义队列,用于多线程下载视频 self.url_queue = queue.Queue() for vid,url in zip(self.result['vid'],self.result['url']): self.url_queue.put((vid,url)) def get_videoUrl(self,url): ''' 提取视频信息中的视频源地址 ''' res = requests.get(url,headers=self.headers) html = res.text videoUrl = re.findall('<video class="video" src=(.*"%s.mp4"下载失败!'%vid) continue t_e = time.time() print('"%s.mp4"下载完成!(用时%.2fs)'%(vid,t_e-t_s)) if __name__ == "__main__": keywords = '多啦A梦' page = 1 # 爬取页数,每页20条信息 t_s = time.time() haokan = Haokan() haokan.get_info(keywords,page) N_thread = 3 # 线程数 thread_list = [] for i in range(N_thread): thread_list.append(threading.Thread(target=haokan.run)) for t in thread_list: t.start() for t in thread_list: t.join() t_e = time.time() print('任务完成!(用时%.2fs)'%(t_e-t_s))运行代码,可以看到小频频全都来到我的碗里了"text-align: center">
写在最后
今天分享的视频下载算是最基础的了,它宛如一位慈祥的老奶奶,慈眉善目,面带笑容。它没有各种繁琐的反爬机制(甚至连headers都不进行验证),而且数据返回的格式也是极其友好的,就连视频格式也显得如此的温柔。
我相信在“她”的陪伴下,我们可以走好学习爬虫的第一步。纵使日后我们还将面临IP验证、参数验证、验证码、行为检测、瑞数系统等等诸多反爬考验,也许还需应对视频格式转换等挑战。
但是,请记住kimol君将始终陪伴在你们身边~最后,感谢各位大大的耐心阅读,咋们下次再会~
以上就是用python制作个视频下载器的详细内容,更多关于python 制作视频下载器的资料请关注其它相关文章!
下一篇:深入理解Python变量的数据类型和存储