解析网站爬取腾讯vip视频
今天用油猴脚本vip一件解析看神奇队长。想到了问题,这个页面应该是找到了视频的api的接口,通过接口调用获取到了视频的地址。
那自己找腾讯视频地址多费劲啊,现在越来越多的参数,眼花缭乱的。
那我就找到这个能够解析vip视频的,解析网站的视频地址,不就OK了。
network上发现,这个视频是通过ts流的形式。
并且还有视频地址和index.m3u8,但是我们怎么获得这些20190527/参数呢。(m3u8中有一部电影的所有ts流参数)
我找到了个api.php,即接口地址,访问,返回json数据。
url: http://p.p40.top/api.php?url=https%3A%2F%2Fv.qq.com%2Fx%2Fcover%2Fxyne4253g35nak3%2Fm0031od9ekb.html
看到了视频流所在地址,然后访问地址,可以直接下载m3u8文件,文件中就是ts流参数了。
因此思路就是:用py模拟浏览器向解析网站的api.php请求你想看的vip视频的url即http://p.p40.top/api.php?url=https%3A%2F%2Fv.qq.com%2Fx%2Fcover%2Fxyne4253g35nak3%2Fm0031od9ekb.html
然后正则匹配到m3u8的地址,去请求后,下载到本地,打开匹配ts流的数字id。
发现视频地址就是api返回的json数据的url+/1000k/hls/xxx
然后依次下载完ts流文件后,保存到本地。再转化成mp4,明儿实现。网上有些现成的。我试着改编下。
这样父母不需要怎么操作,我直接下下来本地给他们看就好了。嘿嘿
脚本如下:
- # -*- coding: UTF-8 -*-
- import requests
- import re
- import os,shutil
- from urllib.request import urlretrieve
- from multiprocessing import Pool
- def cbk(a,b,c):
- '''''回调函数
- @a:已经下载的数据块
- @b:数据块的大小
- @c:远程文件的大小
- '''
- per=100.0*a*b/c
- if per>100:
- per=100
- print('%.2f%%' % per)
- def get_api_data(QQ_film_url): #正则匹配获取api返回的index.m3u8链接地址
- api_url='http://p.p40.top/api.php'
- user_agent={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
- get_url=api_url+'?url='+QQ_film_url
- print(get_url)
- response=requests.get(get_url,headers=user_agent).text
- pattern=re.compile('url.*?m3u8')
- get_data=pattern.findall(response)[0][6:].replace('\\','')
- return get_data
- def m3u8_download(m3u8_url):#获取下载m3u8文件
- if os.path.exists('F:\\vip电影\\index.m3u8')!=True:#判断文件是否已经存在,存在则不操作。不存在才下载。
- urlretrieve(url=m3u8_url, filename=path, reporthook=cbk)
- else:
- print(path+'已存在')
- def get_ts():#通过m3u8文件,正则匹配需要的ts流
- with open(path)as f:
- data=f.read()
- pattern=re.compile('.*.ts')
- get_ts_data=re.findall(pattern,data)
- return get_ts_data
- def ts_download(ts_list):#下载ts流
- try:
- ts_url = m3u8_url[:-10]+'{}'.format(ts_list)#获取ts流 url地址
- urlretrieve(url=ts_url, filename=path[:-10] + r'\\' + '{}'.format(ts_url[-8:]))
- except Exception:
- print(ts_url+'保存文件错误')
- def pool(ts_list):#多进程爬取所有的ts流到文件夹中,参考的那个py脚本,没用过pool进程池
- print('经过计算,需要下载%s个文件'%len(ts_list))
- print(ts_list[0])
- pool=Pool(16)
- pool.map(ts_download,[i for i in ts_list])
- pool.close()
- pool.join()
- print('下载完成')
- ts_to_mp4()
- def ts_to_mp4():
- print('dos实现ts合并为mp4')
- str = 'copy /b ' + r'F:\vip电影' + '\*.ts ' + ' '+ r'F:\vip电影\gogogo' + '\jingqi.mp4'
- os.system(str)
- if os.path.exists('F:\\vip电影\\gogogo\\jingqi.mp4')==True:
- print('good job')
- path = 'F:\\vip电影\\index.m3u8'
- url = 'https://v.qq.com/x/cover/xyne4253g35nak3/m0031od9ekb.html'
- m3u8_url = get_api_data(url)[:-10] + '1000k/hls/index.m3u8'
- print(m3u8_url)
- m3u8_download(m3u8_url)
- ts_list = get_ts()
- if __name__ == '__main__':
- pool(ts_list)
成功,可能是多进程模块的问题,还是出现了将近15个文件错误。少了15个文件,但是为啥爬下来的时长比腾讯视频里的还长。
脚本还有很多地方都可以改进(锻炼自己写脚本的能力),改成类的调用,通过类中的self,一个函数接着一个函数调用。并且试试用多线程试试,多进程总有奇怪的问题,不统一。
看了一会儿,发现,观影视觉极差,我感觉丢失的不止是15个文件,音话都不同步了,是不是直接copy拼接命令有瑕疵。有待研究
解析网站爬取腾讯vip视频的更多相关文章
- Python爬虫实战:爬取腾讯视频的评论
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 易某某 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
- python 爬取腾讯视频的全部评论
一.网址分析 查阅了网上的大部分资料,大概都是通过抓包获取.但是抓包有点麻烦,尝试了F12,也可以获取到评论.以电视剧<在一起>为例子.评论最底端有个查看更多评论猜测过去应该是 Ajax ...
- 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息
简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...
- Python爬取腾讯新闻首页所有新闻及评论
前言 这篇博客写的是实现的一个爬取腾讯新闻首页所有的新闻及其所有评论的爬虫.选用Python的Scrapy框架.这篇文章主要讨论使用Chrome浏览器的开发者工具获取新闻及评论的来源地址. Chrom ...
- 5分钟掌握智联招聘网站爬取并保存到MongoDB数据库
前言 本次主题分两篇文章来介绍: 一.数据采集 二.数据分析 第一篇先来介绍数据采集,即用python爬取网站数据. 1 运行环境和python库 先说下运行环境: python3.5 windows ...
- 爬虫---爬取b站小视频
前面通过python爬虫爬取过图片,文字,今天我们一起爬取下b站的小视频,其实呢,测试过程中需要用到视频文件,找了几个网站下载,都需要会员什么的,直接写一篇爬虫爬取视频~~~ 分析b站小视频 1.进入 ...
- Python爬虫入门教程 2-100 妹子图网站爬取
妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...
- from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...
- 基于webmagic的种子网站爬取
代码地址如下:http://www.demodashi.com/demo/12175.html 1. 概述 因为无聊,闲来没事做,故突发奇想,爬个种子,顺便学习爬虫.本文将介绍使用Spring/Myb ...
随机推荐
- java物流查询接口测试代码-快递100
测试代码 返回json格式,xml/html格式自行修改参数 import java.io.IOException; import java.io.InputStream; import java.n ...
- 热点 | 近期Github热点项目库总结
整理 | Walker 介绍:你有没有想过你会成为一个艺术家,但无奈你不知道如何画画?得益于计算机视觉技术,你可以在ML社区轻松实现这个梦想.更棒的是,Github上ML社区的代码都是开源的! 这就是 ...
- 二维线段树 poj-2155
题意:t组样例 ,输入 n,m,表示n*n的矩阵进行m次操作 ,C: 输入两个坐标 ,组成的矩形 进行取反操作 ,Q:对输的坐标位置输入其值. 思路:一开始想的是用1000(表示x轴)个线段树(对每段 ...
- HTTP 请求状态码
200 请求成功 304 从缓存中读取 302 + 响应头中定义location: 重定向 // 自定义重定向 @RequestMapping("/customRedirecti ...
- 在MVC三层项目中如何使用Log4Net
--前期准备(添加到队列中) 0-1在新建后的MVC项目中的[Models]中添加一个类,用于处理异常信息,并继承自HandleErrorAttribute public class MyExcept ...
- 使用python-crontab给linxu设置定时任务
安装pip install python-crontab #coding=utf-8 from crontab import CronTab #创建类 class Crontabi(object): ...
- 深入解读ES6系列(一)
ECMAScript 6(ES6)简介 前言: 哈喽小伙伴们,爱说'废'话的Z又回来了,欢迎来到Super IT曾的博客时间,我说啦这个月要带的福利,说了更的博客肯定不能水你们,要一起进步学习嘛,今天 ...
- 聊起 BigTable,让你不再胆怯
谷歌“三驾马车”的出现,才真正把我们带入了大数据时代,并指明了大数据的发展方向. GFS 作为其中一驾宝车,解决了大数据存储的难题.它能够把大量廉价的普通机器,聚在一起,充分让每台廉价的机器发挥光和热 ...
- STM32F103ZET6外部中断
1.EXTI功能 外部中断/事件控制器EXTI管理了STM32的20个中断/事件线. EXTI的功能框图如下: 在功能框图中,可以看到很多在信号线上打了一个斜杠并标注“20”的字样,这是表示在STM3 ...
- Linux命令后面加 & 的作用
在命令的后面加一个 & 的作用是,将这个任务放到后台执行.看下面的例子. 输入gedit回车,可以看到,打开了Linux的文本编辑器,但是命令窗口执行不了其他命令了,只有退出文本编辑器才能继续 ...