Python爬取网站视频资源

思路:

在界面找到视频对应的html元素位置,观察发现视频的url为https://www.pearvideo.com/video_+视频的id,而这个id在html中的href中,所以第一步需要通过xpath捕获到所需要的id

https://www.pearvideo.com/video_+id的页面,通过控制台查看返回的响应消息,发现没有视频数据,说明视频是进入页面后由其他请求发起获得

在搜索框中搜索mp4,发现视频文件对应的请求,观察请求的url与负载,发现负载1为视频的id另一个为随机生成的数字。方法为get

由其返回的视频url与元素中的url进行对比发现是用cont-id替换了一段数字。这一段的url就为视频的url

代码实现:

代码:

python 复制代码
import os
from lxml import etree
import requests
import time
from fake_useragent import UserAgent
# UA绕过
ua = UserAgent()
headers = {
    'User-Agent': ua.random
}

def deal_video(id):
    time.sleep(1)
    url = "https://www.pearvideo.com/video_" + id
    url1 = "https://www.pearvideo.com/videoStatus.jsp?contId=" + id
    new_headers = headers
    new_headers["Referer"] = url
    page_json = requests.get(url=url1, headers=new_headers).json()
    video_src = page_json["videoInfo"]["videos"]["srcUrl"]
    key = "cont-"+url1.split("=")[1]
    return video_src.replace(video_src.split('/')[6].split('-')[0], key)

def save_video(video_src,name):
    time.sleep(1)
    print("正在下载"+name)
    videoData = requests.get(url=video_src, headers=headers).content
    if not os.path.exists("./videoLibs"):
        os.mkdir("./videoLibs")
    with open("./videoLibs/"+name+".mp4",'wb') as fp:
        fp.write(videoData)
        print(dic['name']+" 下载完成")


post_url = 'https://www.pearvideo.com/category_1'
# 发出请求
page_text = requests.get(url=post_url, headers=headers).text
# 数据处理
urls = []
tree = etree.HTML(page_text)
videos = tree.xpath('//a[@class="vervideo-lilink actplay"]')
for video in videos:
    time.sleep(0.5)
    name = video.xpath('./@href')[0]
    information_url = "https://www.pearvideo.com/" + name
    h = headers
    id = name.split("_")[1]
    #从函数中获取到视频的资源位置
    video_url=deal_video(id)
    dic = {
        'name': name,
        'url': video_url
    }
    save_video(video_url,name)
    urls.append(dic)

解析:

获取主页的text,然后通过xpath找到所以的视频<a>标签,for循环标签,获得href中的id。存储url与名字。通过视频id进入deal_video函数

在url后动态添加视频id,一个作为访问源url,表示从这个页面向url1发起请求,请求头需要携带Referer。通过字典查找获得srcUrl中的视频链接,并将其数字部分替换为cont-id(KEY)。返回视频的url。

获取视频链接后进入保存函数。

向视频链接发起请求保存到文件夹中

相关推荐
阿俊仔(摸鱼版)1 分钟前
Python 常用运维模块之OS模块篇
运维·开发语言·python·云服务器
军训猫猫头2 分钟前
56.命令绑定 C#例子 WPF例子
开发语言·c#·wpf
sunly_9 分钟前
Flutter:自定义Tab切换,订单列表页tab,tab吸顶
开发语言·javascript·flutter
远方 hi19 分钟前
linux虚拟机连接不上Xshell
开发语言·php·apache
涛ing28 分钟前
23. C语言 文件操作详解
java·linux·c语言·开发语言·c++·vscode·vim
NoneCoder29 分钟前
JavaScript系列(42)--路由系统实现详解
开发语言·javascript·网络
半桔32 分钟前
栈和队列(C语言)
c语言·开发语言·数据结构·c++·git
lly_csdn12334 分钟前
【Image Captioning】DynRefer
python·深度学习·ai·图像分类·多模态·字幕生成·属性识别
九离十1 小时前
C语言教程——文件处理(1)
c语言·开发语言
小高不明1 小时前
仿 RabbitMQ 的消息队列3(实战项目)
java·开发语言·spring·rabbitmq·mybatis