运行环境
IDE丨pycharm
版本丨Python3.6
系统丨Windows
实现目的与思路
目的:
实现对腾讯视频目标url的解析与下载。
思路:
首先拿到想要看的腾讯电影url,通过第三方vip视频解析网站进行解析,通过抓包,模拟浏览器发送正常请求,通过拿到缓存ts文件,下载视频ts文件,最后通过转换为mp4文件,即可实现正常播放。
完整代码
import re``import os,shutil``import requests,threading``from urllib.request import urlretrieve``from pyquery import PyQuery as pq``from multiprocessing import Pool``'''``'''``class video_down():` `def __init__(self,url):` `# 拼接全民解析url` `self.api='https://jx.618g.com'` `self.get_url = 'https://jx.618g.com/?url=' + url` `#设置UA模拟浏览器访问` `self.head = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}` `#设置多线程数量` `self.thread_num=32` `#当前已经下载的文件数目` `self.i = 0` `# 调用网页获取` `html = self.get_page(self.get_url)` `if html:` `# 解析网页` `self.parse_page(html)` `def get_page(self,get_url):` `try:` `print('正在请求目标网页....',get_url)` `response=requests.get(get_url,headers=self.head)` `if response.status_code==200:` `#print(response.text)` `print('请求目标网页完成....\n 准备解析....')` `self.head['referer'] = get_url` `return response.text` `except Exception:` `print('请求目标网页失败,请检查错误重试')` `return None`` `` ` `def parse_page(self,html):` `print('目标信息正在解析........')` `doc=pq(html)` `self.title=doc('head title').text()` `print(self.title)` `url = doc('#player').attr('src')[14:]` `html=self.get_m3u8_1(url).strip()` `#self.url = url + '800k/hls/index.m3u8'` `self.url = url[:-10] +html` `print(self.url)` `print('解析完成,获取缓存ts文件.........')` `self.get_m3u8_2(self.url)` `def get_m3u8_1(self,url):` `try:` `response=requests.get(url,headers=self.head)` `html=response.text` `print('获取ts文件成功,准备提取信息')` `return html[-20:]` `except Exception:` `print('缓存文件请求错误1,请检查错误')`` `` ` `def get_m3u8_2(self,url):` `try:` `response=requests.get(url,headers=self.head)` `html=response.text` `print('获取ts文件成功,准备提取信息')` `self.parse_ts_2(html)` `except Exception:` `print('缓存文件请求错误2,请检查错误')` `def parse_ts_2(self,html):` `pattern=re.compile('.*?(.*?).ts')` `self.ts_lists=re.findall(pattern,html)` `print('信息提取完成......\n准备下载...')` `self.pool()` `def pool(self):` `print('经计算需要下载%d个文件' % len(self.ts_lists))` `self.ts_url = self.url[:-10]` `if self.title not in os.listdir():` `os.makedirs(self.title)` `print('正在下载...所需时间较长,请耐心等待..')` `#开启多进程下载` `pool=Pool(16)` `pool.map(self.save_ts,[ts_list for ts_list in self.ts_lists])` `pool.close()` `pool.join()` `print('下载完成')` `self.ts_to_mp4()` `def ts_to_mp4(self):` `print('ts文件正在进行转录mp4......')` `str='copy /b '+self.title+'\*.ts '+self.title+'.mp4'` `os.system(str)` `filename=self.title+'.mp4'` `if os.path.isfile(filename):` `print('转换完成,祝你观影愉快')` `shutil.rmtree(self.title)`` `` ` `def save_ts(self,ts_list):` `try:` `ts_urls = self.ts_url + '{}.ts'.format(ts_list)` `self.i += 1` `print('当前进度%d/%d'%(self.i,len(self.ts_lists)))` `urlretrieve(url=ts_urls, filename=self.title + '/{}.ts'.format(ts_list))` `except Exception:` `print('保存文件出现错误')`` `` `` `` ``if __name__ == '__main__':` `#电影目标url:狄仁杰之四大天王` `url='https://v.qq.com/x/cover/r6ri9qkcu66dna8.html'` `#电影碟中谍5:神秘国度` `url1='https://v.qq.com/x/cover/5c58griiqftvq00.html'` `#电视剧斗破苍穹` `url2='https://v.qq.com/x/cover/lcpwn26degwm7t3/z0027injhcq.html'` `url3='https://v.qq.com/x/cover/33bfp8mmgakf0gi.html'` `video_down(url2)
视频缓存ts文件
这里都是一些缓存视频文件,每个只有几秒钟播放,最后需要合并成一个mp4格式的视频,就可以正常播放,默认高清下载 。
注意这里的进度因为使用多进程下载,进度仅供参考,没有确切显示进度,可以进文件夹查看正常进度,可以理解为显示一次进度,下载一个ts文件。
实现效果
以上就是“实战:用Python抓取腾讯视频电影”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。