直接使用request爬取视频一般都会遭遇反爬虫,
调用aria2来爬取视频亲测有效
- 首先得先下载aria2
- 下载安装完成以后打开aria2.conf,把下面的配置复制过去
#允许rpc
enable-rpc=true
#允许非外部访问
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
rpc-listen-port=6800
#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=32
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=16
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=256
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#文件保存路径, 默认为当前启动位置
#dir="./"
#使用代理
# all-proxy=localhost:1080
#添加引用页
referer=http://images.dmzj.com/
- 新建bat文件打开aria2
start aria2c --conf-path=aria2.conf
pause
- 然后使用下面的代码就可以下载啦
import json
from urllib.request import urlopen
from pyquery import PyQuery as pq
import requests
import urllib3
import re
import os
urllib3.disable_warnings()
filepath="保存.ts文件的地址"
# 调用aria2下载视频
def download(url, filepath):
jsonreq = json.dumps([{'jsonrpc': '2.0', 'id': 'sdfg',
'method': 'aria2.addUri',
'params': [[url],{'refer': url,'dir':filepath}],
}]).encode()
c = urlopen('http://localhost:6800/jsonrpc', jsonreq)
#返回ts文件的地址
def getResourcesUrlList(mainUrl):
mainData=requests.get(mainUrl,params={},verify=False).text
pattern = re.compile(r'.*\.ts')
tslist = pattern.findall(mainData)
#具体情况具体分析,不同的网站的地址不同,注意修改
return list(map(lambda s:mainUrl.replace("index.m3u8", s), tslist))
#.m3u8的地址
mainUrl=".m3u8的地址"
print(mainUrl)
resourcesUrlList=getResourcesUrlList(mainUrl)
print(resourcesUrlList)
for item in resourcesUrlList:
download(item, filepath)