Python爬虫:用最普通的方法爬取ts文件并合成为mp4格式

介绍:

自学爬虫时,一开始就是爬取一些文字(比如小说之类的),再后来变成了图片,再后来变成了视频…
其中最简单的就是对文字的爬取了,从文字过渡到图片也只是多了几行代码而已,但是: 从图片过渡到视频就要 分情况了。


分情况解释:

第一种情况: 链接明确是以 mp4、mkv、rmvb 这类视频格式后缀为结尾的链接,这种下载很简单,和图片下载的方法一样,就是视频文件要比图片大而已。

第二种情况: 另一种,链接是以 m3u8 这类以多个 ts 文件组成的链接。

ts文件 ? 链接: 百度知道

然而,在进行爬取的过程中,你会发现:第二种情况又有两种呈现方式:

第一种: 网页源码中的链接直接以 m3u8 结尾,这类的链接,推荐使用 FFmpeg 进行下载。(注意该工具下载成功后需要配置环境变量才可以使用。)

使用方法:

import ffmpy3
ffmpy3.FFmpeg(inputs={
   
   'http://***.m3u8': None}, outputs={
   
   name+'.mp4':None}).run()

FFmpeg 可以帮你下载 m3u8 格式的视频,而且还能帮你自动转换为 mp4 的格式,并且不会出现拼接 ts 文件时乱序的情况。

第二种: 也是我今天着重说的一种情况。网页源码中并没有以 m3u8 格式结尾的链接。而是由在网页中直接请求并解析 ts 文件。

比如以下的视频网站:
在这里插入图片描述
在这里插入图片描述


分析及爬取:

我们就在当前网站爬取一个前段时间热播的动漫:《天气之子》 来演示用最为基础的 with open() 来爬取 ts 文件并合成为 mp4 格式的方法。
进入 天气之子 的主页,通过控制台我们需要构建一点简单的头文件来防止反爬: (主链接被我修改了,怕被和谐,这里主要分享的是方法。)

header = {
   
   
    'origin': 'https://www.******.tv',
    'referer': 'https://www.******.tv/py/lJWMpVmYqRWb_1.html?158064',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.72'
}

由于我曾经被拉进过网站的黑名单: 所以还是默默的写个代理 IP 吧。在这里插入图片描述

不会写 IP代理 ? 链接: Python爬虫,自建IP地址池.

proxies = ['HTTP://110.243.30.23:9999', 'HTTP://222.189.191.206:9999', 'HTTP://118.212.104.138:9999',
           'HTTP://182.149.83.97:9999', 'HTTP://106.42.163.100:9999', 'HTTP://120.83.107.69:9999',
           'HTTP://60.13.42.135:9999', 'HTTP://60.205.188.24:3128', 'HTTP://113.195.232.23:9999',
           'HTTP://59.62.36.74:9000', 'HTTP://218.2.226.42:80']
proxy = {
   
   'HTTP': random.choice(proxies)}  #随机选取一个IP

通过点击每一个 ts 文件,我们发现,对于每一个 ts 文件的请求地址都差不多:具体为:

https://*****/20200508/19312_c9d456ff/1000k/hls/d3276cb180400(****).ts
括号中的 * 代表数字,如: 0001、0002、0003…9999
通过拉动进度条可以快速地查看,最大的数字为 1613

我们来试着请求 一下某段 ts 文件:

import os
import requests
import random

header = {
   
   
    'origin': 'https://www.pianku.tv',
    'referer': 'https://www.pianku.tv/py/lJWMpVmYqRWb_1.html?158064',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.72'
}
proxies = ['HTTP://110.243.30.23:9999', 'HTTP://222.189.191.206:9999', 'HTTP://118.212.104.138:9999',
           'HTTP://182.149.83.97:9999', 'HTTP://106.42.163.100:9999', 'HTTP://120.83.107.69:9999',
           'HTTP://60.13.42.135:9999', 'HTTP://60.205.188.24:3128', 'HTTP://113.195.232.23:9999',
           'HTTP://59.62.36.74:9000', 'HTTP://218.2.226.42:80']
proxy = {
   
   'HTTP': random.choice(proxies)}
print(proxy)
path = './Spider/'
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值