爬虫目的

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

实现思路

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

页面分析

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

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

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

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

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

代码实现

获取vkey,从上面的分析我们可以知道,get请求的网址为
https://www.administratorm.com/WANG.WANG/index.php?url=[要下载的xx电影]
我采用输入链接的方式来拼接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':'无名小站'}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 = '无名小站
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_encodingcontent = response.textvkey = re.findall('vkey.*?\'(.*?)\'',content)[0]return vkey

制作表单,获取了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

发送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_encodingu = json.loads(response.text)return u['url']

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

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 = 0for content in response.iter_content(chunk_size=batch_size):f.write(content)print('\r','#'*i+' 已下载{}%'.format(i),end='\r',flush=True)i += 1print("下载成功")

知道你对python感兴趣,所以给你准备了下面的资料~

这份完整版的Python完整源码已经上传,朋友们如果需要可以点击链接免费领取或者滑到最后扫描二v码加我耗油【保证100%免费

python爬虫脚本入门-通过电影脚本讲些爬虫知识相关推荐

  1. python爬虫脚本入门——飞天秒杀脚本

    前言 前段时间抢茅台脚本非常火,它是Python脚本,加上刚好最近在学习Python,我们准备通过这个脚本,来加深学习Python. 抢茅台的脚本其实属于爬虫脚本的一类,它实现了模拟登陆,模拟访问并抓 ...

  2. python爬虫从入门到放弃-python爬虫从入门到放弃(二)- 爬虫的深层原理

    上次说到了爬虫的基本原理.这次再深入的了解学习一下深层的本质. 因为本人属于小白,这两年接触的都是ETL.数据仓库.BI 方面的东西,故这里转载以为专业人士的爬虫原理,末尾有原文地址. 爬虫就是请求网 ...

  3. python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  4. python入门教程第28讲_Python爬虫入门教程第二十八讲: 《海王》评论数据抓取 scrapy...

    1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面没 ...

  5. 【小甲鱼】python零基础入门学习笔记 03讲~43讲

    本篇基于[莫烦]python基础教程,属于查漏补缺 建议学习顺序 小甲鱼->莫烦numpy&pandas 目录 第003讲 插曲之变量和字符串 课堂笔记 变量 变量 需要注意的地方 字符 ...

  6. python爬虫从入门到实战笔记——第一章爬虫原理和数据爬取

    爬虫原理和数据抓取 1.1 通用爬虫和聚焦爬虫 通用爬虫 聚焦爬虫 1.2 HTTP和HTTPS HTTP的请求与响应 浏览器发送HTTP请求的过程: 客户端HTTP请求 请求方法 常用的请求报头 服 ...

  7. linux更改语言脚本,Linux shell脚本入门——shell语言脚本【CentOS】

    认识脚本 是使用一种特定的描述性语言,依据一定的格式编写的可执行文件.脚本语言又被称为扩建的语言, 或者动态语言, 是一种编程语言, 用来控制软件应用程序, 脚本通常是以文本 (ASCⅡ) 保存, 只 ...

  8. python爬虫爬取豆瓣电影信息城市_python爬虫,爬取豆瓣电影信息

    hhhhh开心,搞了一整天,查了不少python基础资料,终于完成了第一个最简单的爬虫:爬取了豆瓣top250电影的名字.评分.评分人数以及短评. 代码实现如下:#第一个最简单的爬虫 #爬取了豆瓣to ...

  9. Python网络爬虫从入门到实践 -- chapter 1 -- 网络爬虫入门

    1 Robots协议 Robots协议(爬虫协议)全称网络爬虫排除标准,网站通过Robots协议告诉搜索引擎哪些页面可以抓取(Allow:/),哪些不能抓取(Disallow:/).这个协议是国际互联 ...

最新文章

  1. 团队实践,我们是怎么用敏捷开发工具Leangoo的
  2. 多线程编程2-NSOperation
  3. 解决在html中引入font-awesome的css文件后, 图标显示不出来
  4. 触发器批量更新 用游标,一个一个处理
  5. java - 菲波拉契数列 兔子个数
  6. 远程同步修改云服务器上的文件
  7. Squirrel Engine 曝漏洞,可导致攻击者入侵游戏和云服务
  8. C#中如何跨窗体传值
  9. MDK 编译错误和警告 使用时遇到的小问题
  10. 如何监测系统用户是否登录_网站建设教程:PageAdmin Cms如何获取用户登录状态...
  11. ASP.NET 获取IP信息等探针
  12. 互联网思维心得体会1500字_互联网思维学习心得体会
  13. 如何把视频写在博客里?
  14. java中最多小数位_在Java中最多2位小数?
  15. 火焰图Flame Graph
  16. 自己搭建php主机绑定域名,只需5步,教你用虚拟主机搭建出属于自己的网站
  17. 测试工作规范及岗位职责
  18. vue3组合式Composition API之setup函数的具体用法
  19. 用户手册(GB8567——88) (转)
  20. 2022年中式烹调师(中级)复训题库及模拟考试

热门文章

  1. 大厂们终于无法忍受“加一秒”了,微软谷歌Meta等公司提议废除闰秒
  2. 网络安全需谨慎,别不知不觉当了间谍!
  3. 前端需要了解的Nigix实现反向代理与负载均衡
  4. input输入框回车事件响应
  5. 山东大学软件学院项目实训weblab-5
  6. UE4 UI实现改键功能
  7. 交换两个变量的值的三种方法
  8. 基于 MNIST 数据集的 Pytorch 卷积自动编码器
  9. 全局变量和局部变量重名
  10. openwrt查看linux内核,OPENWRT 更换内核版本位置