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 13 Python
python查询sqlite数据表的方法
May 08 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
python查看列的唯一值方法
Jul 17 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
Python list与NumPy array 区分详解
Nov 06 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Keras Convolution1D与Convolution2D区别说明
May 22 Python
Python闭包装饰器使用方法汇总
Jun 29 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获取数组最大值下标的方法
2015/05/12 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
Python Tkinter基础控件用法
2014/09/03 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python测试模块doctest使用解析
2019/08/10 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
python 调用Google翻译接口的方法
2020/12/09 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
.NET概念性的面试题
2012/02/29 面试题
申请任职学生会干部自荐书范文
2014/02/13 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python