利用Python爬虫实现vip电影下载

Python爬虫实现vip电影下载爬虫目的实现对各大视频网站vip电影的下载 , 因为第三方解析网站并没有提供下载的渠道 , 因此想要实现电影的下载 。
私信小编01即可获取大量Python学习资料
实现思路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进行解码 , 我们手动打开看看里面的内容 , 下载后打开
利用Python爬虫实现vip电影下载文章插图
?发现里面并没有我们想要的ts文件 , 但是在文件中有一行1000k/hls/index.m3u8 , 也是以m3u8为后缀的 , 使用前面的url与文件中的部分地址拼接 , 结果为:, 再次用浏览器手动打开 , 下载内容后发现里面是一个个ts文件 , 最后将ts文件下载后拼接即可(因为我爬的时候还是电影链接 , 写博客时发现改了 , 所以拼接方法我也不会 , 网上应该容易找到) 。
利用Python爬虫实现vip电影下载文章插图
?下面我们只要获取vkey就可以得到这些ts文件地址了 , 我们向前看 , 找返回内容有vkey的get请求:
利用Python爬虫实现vip电影下载文章插图
?对比发现和post请求中的vkey一样 , 接下来就可以开始编写代码了 。
代码实现

  1. 获取vkey , 从上面的分析我们可以知道 , get请求的网址为[要下载的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':'://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 = ''input_url = input("请输入电影url链接:")print("请稍等!")get_key_url = ''+input_urlparsed_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_encodingcontent = response.textvkey = re.findall('vkey.*?\'(.*?)\'',content)[0]return vkey