# 采集某牙视频
# 代码原理
# 1.发送请求,获取数据
# 2.解析数据,保存数据
# 多个视频采集 分析url变化规律
# 通过视频ID来下载,就可以获取所有视频内容 《ID 一般出现在 列表页面》
# -*- coding: utf-8 -*-
import csv
import re
from time import time
import parsel
import requests
# 采集取虎牙视频
from pip._vendor.rich import json
# 代码原理
# 1.发送请求,获取数据
# 2.解析数据,保存数据
# 多个视频采集 分析url变化规律
# 通过视频ID来下载,就可以获取所有视频内容 《ID 一般出现在 列表页面》
def main():
start = time()
# 多视频列表
urls = 'https:/****ya.com/g/Dance_new_51'
# 单视频链接
url = 'https:/****uya.com/moment/getMomentContent?callback=jQuery1124020964233777258934_1653215833592&videoId=715239603&uid=&_=1653215833600'
headers = {
# 浏览器基本信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
# 通过多视频列表采集到ID
response = requests.get(url=urls, headers=headers)
# print(response.text)
# 通过正则找数据 \d+ 表示匹配一个或多个数字
video_id_list = re.findall('<li data-vid="(\d+)">', response.text)
print(video_id_list)
for video_id in video_id_list:
url = f'https:/****ya.com/moment/getMomentContent?callback=jQuery1124020964233777258934_1653215833592&videoId={video_id}&uid=&_=1653215833600'
fetchOneVideo(headers, url, video_id)
# fetchOneVideo(headers, url)
end = time()
print('总共耗费了%.2f秒.' % (end - start))
def fetchOneVideo(headers, url, id):
# 1.发送请求
response = requests.get(url=url, headers=headers)
jstr = json.loads(response.text.split('(')[1][:-1])
# <Response [200]>:请求成功
# 2. 获取数据
# print(jstr)
title = jstr['data']['moment']['title']
video_url = jstr['data']['moment']['videoInfo']['definitions'][0]['url']
print(title)
print(video_url)
# 3. 请求视频二进制数据,保存数据
video_content = requests.get(url=video_url, headers=headers).content
with open(id + title + '.mp4', mode='wb') as f:
f.write(video_content)
print(title, '保存成功')
# 采集虎牙视频。
if __name__ == '__main__':
main()
采集保存某牙视频