爬虫从入门到入预(18)

今天学习的是如何爬取视频,回顾我们爬取网页文字小说或者图片的时候,大都是从主页面进入到子页面,然后图片就拿到它的src,文字小说大概是拿到某个节点的content.但是爬取视频和上述二者有较大的区别,视频在服务器中的存放是分清晰度和分切片的,以至于我们每次请求都只能请求较短的一小个切片,所以想要爬取一个完整的视频就需要不断请求各个切片的url。然后下载ts文件,并合并成为一个完整的mp4文件。

#<video src="*****.mp4"></video>这种形式写的url会让访问者访问速度特别慢,尤其是加载大视频的时候,会一次性全部加载,就需要等待很久
#视频网站的工作原理
#用户上传视频——转码(转换成不同分辨率的同时长视频,4K-2K\1K\1080P)——切片处理(把单个视频文件进行拆分)
#用户在拖动进度条的时候其实是选择哪个切片

#需要一个文件来记录信息:1.视频的播放顺序2.视频的存放路径
#m3u8 txt json----文本---可编码
#想要抓取一个视频:
#1.找到m3u8文件(各种手段)
#2.通过m3u8文件下载到ts文件
#3.运用各种手段把ts文件合并成mp4文件

今天的任务:

#抓取视频简单版:
"""
    1.拿到html页面源代码
    2.从源代码里面提取出m3u8的url
    3.下载m3u8
    4.读取m3u8文件,下载视频
    5.合并视频
"""

import requests
import re

#1.拿到html页面源代码
url="http://www.91kanju2.com/vod-play/60767-1-1.html"
headers={
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"
}
resp=requests.get(url)
#print(resp.text)

#2.从源代码里面提取出m3u8的url
obj=re.compile(r'"","url":"(?P<m3u8_url>.*?)"',re.S)#提取m3u8的下载地址
m3u8_url=obj.search(resp.text).group("m3u8_url")
print(m3u8_url)
resp.close()

#3.下载m3u8文件
resp2=requests.get(m3u8_url)
with open("仙剑1.m3u8","wb")as f:
    f.write(resp2.content)
resp2.close()
print("下载完毕")

#4.解析m3u8文件
n=1
with open("仙剑1.m3u8",mode="r",encoding="utf-8")as f:
    for line in f:
        line=line.strip()#跳过两边的所有空格
        if line.startswith("#"):
            continue
        #下载视频片段
        resp3=requests.get(line,headers=headers)
        a=open(f"files/仙剑奇侠传/{n}.ts","wb")
        a.close()
        resp3.close()
        n+=1

 最后总结,我没有将结果做出来,主要原因是服务器已经将ts文件的url进行了加密,所以当我们请求url的时候,发现返回的内容是空。具体的解决办法应该还不是我现在可以解决的,期待未来学习到了新的知识回顾解决,也曾想过试一下像网易云那节课进行逆向解密,但是步骤繁琐。将问题交给未来吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值