Python爬虫实现vip电影下载的示例代码


Posted in Python onApril 20, 2020

爬虫目的

实现对各大视频网站vip电影的下载,因为第三方解析网站并没有提供下载的渠道,因此想要实现电影的下载。

实现思路

1.选择一个合适的vip解析网站,这里选择了无名小站的接口,因为尝试了很多网站,有些网站想要爬取很困难,无名小站相对简单,接口为www.wmxz.wang/video.php?url=[vip电影的链接]
2.利用Fiddler进行抓包,模拟浏览器发送post请求,获取电影实际下载地址。
3.使用PyQt5进行包装,实现多样化的功能。(可选)

页面分析

我使用Fiddler抓包,首先,浏览器进入接口,这里随便加一个vip电影的链接,然后来看post请求:

Python爬虫实现vip电影下载的示例代码

我们已经知道了提交post请求的url,箭头所指的地方是提交的表单,里面的url就是我们要下载vip电影的ur,出现%3F这些是因为将url编码为了ASCII码,这里可能使用urllib对其进行解析,很简单;vkey需要我们获取,其实它就藏在Post请求之前get请求返回的页面中,vkey是动态变化的,每一次都不一样。红线部分是服务器返回的信息,前几天我爬取的时候里面的url还是电影的下载链接,现在变成了一个m3u8文件,里面的网址也是编码后的,我们需要用urllib进行解码,我们手动打开https://youku.cdn2-okzy.com/20200408/8808_23a9c669/index.m3u8看看里面的内容,下载后打开

Python爬虫实现vip电影下载的示例代码

发现里面并没有我们想要的ts文件,但是在文件中有一行1000k/hls/index.m3u8,也是以m3u8为后缀的,使用前面的url与文件中的部分地址拼接,结果为: https://youku.cdn2-okzy.com/20200408/8808_23a9c669/1000k/hls/index.m3u8,再次用浏览器手动打开,下载内容后发现里面是一个个ts文件,最后将ts文件下载后拼接即可(因为我爬的时候还是电影链接,写博客时发现改了,所以拼接方法我也不会,网上应该容易找到)。

Python爬虫实现vip电影下载的示例代码

下面我们只要获取vkey就可以得到这些ts文件地址了,我们向前看,找返回内容有vkey的get请求:

Python爬虫实现vip电影下载的示例代码

对比发现和post请求中的vkey一样,接下来就可以开始编写代码了。

代码实现

获取vkey,从上面的分析我们可以知道,get请求的网址为
https://www.administratorm.com/WANG.WANG/index.php?url=[要下载的vip电影]
我采用输入链接的方式来拼接get请求要访问的url,顺便使用urllib库将输入链接编码,方便后面的post请求使用

headers1 = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
      'Referer':'https://www.administratorm.com/index.php?url=https://v.qq.com/x/cover/mzc00200q06w7zx/j0033kbdjsv.html'
      }

headers2 = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
#定义接口链接
api_url = 'https://www.administratorm.com/WANG.WANG/Api.php'
input_url = input("请输入电影url链接:")
print("请稍等!")
get_key_url = 'https://www.administratorm.com/WANG.WANG/index.php?url='+input_url
parsed_url = parse.quote(input_url,safe='')

这里创建一个会话,会话是用于服务器记录用户身份的,然后就是发送get请求,获取网页源码,然后使用re匹配到vkey的内容,这里要注意的是get请求中的verify=False参数,其实我也不太明白,是一些网站有SSl认证,加了这个参数就可以跳过认证,加了此参数可能会有很多警告,使用 logging.captureWarnings(True) 设置不显示警告。

sess = requests.session()
vkey = get_key(sess,get_key_url)

def get_key(sess,get_key_url):
  logging.captureWarnings(True)
  response = sess.get(get_key_url,headers=headers1,verify=False)
  response.encoding=response.apparent_encoding
  content = response.text
  vkey = re.findall('vkey.*?\'(.*?)\'',content)[0]
  return vkey

2.制作表单,获取了vkey后,我们就可以制作提交post请求的表单了,代码很简单,就不做介绍了。

datas = make_dataform(parsed_url,vkey)
def make_dataform(parsed_url,vkey):
  datas = {
      'url':parsed_url,
      'wap':'0',
      'ios':'0',
      'vkey':vkey,
      'type':''
  
    }
  return datas

3.发送post请求,这里再次说明,由于我原来post请求返回的信息是电影下载地址,所以我获得的url是下载地址,现在再提交post请求获得的是m3u8文件。

download_url = post(sess,datas)
def post(sess,datas):
  response = sess.post(api_url,headers=headers2,data=datas)
  response.encoding=response.apparent_encoding
  u = json.loads(response.text)
  return u['url']

4.下载电影,由于链接不同,我就把我下载电影的代码放到这里,做个参考。

down_load(sess,download_url)
def down_load(sess,download_url):
  print("正在准备下载电影")
  response = requests.get(download_url,headers=headers2,verify=False)
  total_size = response.headers['Content-Length']
  print("将要下载的电影大小:{}MB".format(round(int(total_size)/1024/1024,2)))
  batch_size = int(total_size)//100
  #返回迭代器:是将二进制流按大小分割之后的
  k = input("请输入文件路径(C/D):")
  filename = input("请输入保存文件名:")
  with open(r"{}:/电影/".format(k)+filename+".mp4",'wb') as f:
    i = 0
    for content in response.iter_content(chunk_size=batch_size):
      f.write(content)
      print('\r','#'*i+' 已下载{}%'.format(i),end='\r',flush=True)
      i += 1
    print("下载成功")

程序界面

使用PyQt5将上面的代码包装起来,使其更加美观,并添加一些功能,由于WebEngineView已经不能播放flash了,并且有些需要新建标签的链接打不开,所以中间的浏览器很鸡肋,就图个好看吧。

Python爬虫实现vip电影下载的示例代码

这里就不详细讲了,PyQt5也比较简单,容易上手,如果需要的话联系我吧。

总结

这是我第一次写博客,如果哪里有问题请及时指出来,欢迎大家指正错误,此爬虫项目只用于入门,请不要用其盈利。否则,后果自负!

到此这篇关于Python爬虫实现vip电影下载的示例代码的文章就介绍到这了,更多相关Python爬虫vip电影下载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的匿名函数使用简介
Apr 27 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
基于python实现KNN分类算法
Apr 23 Python
python性能测量工具cProfile使用解析
Sep 26 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
Feb 13 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
Python数据分析入门之教你怎么搭建环境
May 13 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 #Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 #Python
TensorFlow打印输出tensor的值
Apr 19 #Python
numpy库reshape用法详解
Apr 19 #Python
tensorflow常用函数API介绍
Apr 19 #Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 #Python
pip安装tensorflow的坑的解决
Apr 19 #Python
You might like
PHP和XSS跨站攻击的防范
2007/04/17 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
详解PHP PDO简单教程
2019/05/28 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
Python使用新浪微博API发送微博的例子
2014/04/10 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
python 串行执行和并行执行实例
2020/04/30 Python
Python内置函数property()如何使用
2020/09/01 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
解除劳动合同协议书
2014/04/14 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
校庆口号
2014/06/20 职场文书
三方股份合作协议书
2014/10/13 职场文书