开头
看电影还在花钱?啥年代了?居然还有看电影花钱的,今天就给你上一课,让你看看看电影是不需要花钱的。说干就干,冲冲
冲,代码与实现思路就放在下面了。
实现目的与思路
目的:
实现对腾讯视频目标url的解析与下载,由于第三方vip解析,只提供在线观看,隐藏想实现对目标视频的下载
思路:
首先拿到想要看的腾讯电影url,通过第三方vip视频解析网站进行解析,通过抓包,模拟浏览器发送正常请求,通过拿到缓存ts文
件,下载视频ts文件,最后通过转换为mp4文件,即可实现正常播放
完整代码
Python ###Python学习交流Q群:906715085### 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): self.api=\'https://jx.618g.com\' self.get_url = \'https://jx.618g.com/?url=\' + url 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(\'正在下载...所需时间较长,请耐心等待..\') #开启多进程下载 p ool=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): p rint(\'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文件
实现效果
结尾
每日分享的小技能都学会了吗?今天给大家分享的这个小技能还是特别有用的,毕竟看电影不花钱谁不心动,心动就要行动,马
上就动手爬起来。喜欢的小伙伴记得点赞收藏,毕竟点赞的都是人美心善的。不懂的小伙伴记得评论留言,看到就给你回复。当
然,你也可以私信我啦!!!
来源:https://www.cnblogs.com/123456feng/p/16173934.html
本站部分图文来源于网络,如有侵权请联系删除。