鑫三科技网站设计,做网站首页的表格的代码,重庆建网站方法,wordpress微信支付模板文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站#xff1a;B站视频#xff08;https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a#xff09;#xff0c;用于本文测验 要求#xff1a;抓取该网址下的视频B站视频https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a用于本文测验 要求抓取该网址下的视频将其存入本地如下 2、网页分析 在分析网页前我们需要明白爬取的数据是什么因为b站的视频跟音频是分开存放的所以我们需要分别找到视频和音频的url然后在对其发起请求将视频和音频保存至本地最后将两者合并在一起才能形成完整的视频文件 打开目标网站大家可以先登录B站这样才能下载高清视频打开浏览器开发者模式刷新网页寻找数据接口 经过分析在Network-Doc下发现了一个文件该文件源码中就存放了视频和音频的url地址所以我们需要向该文件接口发起请求将视频和音频的url地址解析出来 得到该数据接口的请求url和请求参数 找到所需的数据接口后我们可以先分析一下网页源码我们发现视频url存放在一个 script标签下的 video下 我们需要获取的是 video下的 baseurl但我们会发现这种url在video下有许多他们其实代表着不同清晰度和不同编码这里我教大家如何区分首先id相同的表示是同一个清晰度的视频urlcodes 代表着不同的编码格式大家可以根据第3步图中信息判断清晰度id80就代表 高清1080p因为我没有会员这里最高只显示高清1080p的baseurl所以我们就抓取它即可 音频的url同样也在script标签下我们向下翻发现音频url在 audio 下的 baseUrl中且下面有3种类型的baseurl我们同样根据id来选择视频url为高清1080p所以音频就选择id30280的baseurl
3、代码编写 编写代码前需要大家安装一个第三方工具ffmpeg用于合并视频和音频 安装教程https://blog.csdn.net/qq_45956730/article/details/125272407 完整代码: 目标站点https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a B站
任务抓取网址下的视频将其存入本地
# 导入模块
import requests
import re
import json
from jsonpath import jsonpath
from bs4 import BeautifulSoup
import os# 1、站点信息# 目标网站
url https://www.bilibili.com/video/BV1se41117WP/# 身份信息若cookie值失效刷新网页更换即可
header {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36,Referer:https://www.bilibili.com/,Cookie:i-wanna-go-back-1; buvid43347E997-02D2-04C8-A7BF-156C62FCF90B88409-022070218-vps4PunhlmjD%2FldTeJtIPg%3D%3D; buvid_fp_plainundefined; DedeUserID131564301; DedeUserID__ckMd5cd1905451e79f724; CURRENT_BLACKGAP0; buvid3256ABE92-A581-24BC-8E24-6FF290D67AAD49841infoc; b_nut1698501949; b_ut7; _uuidE716FD102-B224-3AF5-BF13-7FFF9888B73450357infoc; rpdid|(um)~|)kk)k0JuYm)l|um~u; PVID1; header_theme_versionCLOSE; enable_web_pushDISABLE; fingerprint561ef2aee0e68972fc241f5969acd97b; hit-dyn-v21; FEED_LIVE_VERSIONV_WATCHLATER_PIP_WINDOW3; CURRENT_FNVAL4048; buvid_fp561ef2aee0e68972fc241f5969acd97b; SESSDATA33cf5dfb%2C1744988952%2Cb57ab%2Aa1CjBKimVs0wevrn9Ta4wYyhdBx-INz-37PGOJXhzOdeCNbnP3by5al9qZYhWgDs8BqO0SVk5MQzdsRzNWbWNaTHhWX3E1d1RKbl9WS3BGWjVudnpjd0d6NnV0ZWxYSU9FREktWlY0d2pMaU1LU1JVSUNZWFFtdDk1OEMyWFNickFCOFlncy1RYXR3IIEC; bili_jctf6fe7d7a9e53628a226c3b5635076cbf; bp_t_offset_131564301990413587237306368; bili_ticketeyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3Mjk2OTY0MzcsImlhdCI6MTcyOTQzNzE3NywicGx0IjotMX0.6xy7DMJZDMBJycpOYWnXejp5ihkcRy4mE85OBVgjUFU; bili_ticket_expires1729696377; bmg_af_switch1; bmg_src_def_domaini0.hdslb.com; sid6az7b526; CURRENT_QUALITY64; home_feed_column4; browser_resolution1279-700; b_lsid61131031F_192AE3E6666,
}# 请求参数、
param {vd_source:e8e376ccbc5aa4cfd88e6a7917adfd1a,
}# 2、请求网站
def get():response requests.get(url,headersheader,paramsparam) # 发起请求if response.status_code 200:html_data response.text # 返回网页源码data re.findall(scriptwindow.__playinfo__(.*?)/script,html_data,re.S)[0] # 用正则将网页中script标签内的数据匹配出来json_data json.loads(data) # 将匹配的数据转换为json格式字典return html_data,json_data# 3、解析数据
def parse(html_data,json_data):soup BeautifulSoup(html_data,lxml) # 生成解析对象title soup.select(div.title-txt)[0].string # 获取视频标题有多种方法大家自行选择# print(title)video_url jsonpath(json_data,$..data.dash.video..baseUrl)[0] # 获取视频链接# print(video_url)audio_url jsonpath(json_data,$..data.dash.audio..baseUrl)[0] # 获取音频链接# print(audio_url)return title,video_url,audio_url# 4、将视频存放至本地
def save(title,video_url,audio_url,path):print(视频和音频开始下载)video requests.get(video_url,headersheader).content # 下载视频audio requests.get(audio_url,headersheader).content # 下载音频# 保存视频with open(f{path}{title}.mp4,wb) as f1: # 将视频保存至指定路径下f1.write(video)print(视频下载完成)# 保存音频with open(f{path}{title}.mp3,wb) as f2: # 将音频保存至指定路径下f2.write(audio)print(音频下载完成)# 5、合并视频和音频
def craft(path,title):# 使用第三方工具ffmpeg合成视频和音频的命令参考https://blog.csdn.net/bangongzhushou/article/details/140019824cmd frffmpeg -i {path}{title}.mp4 -i {path}{title}.mp3 -c:v copy -c:a aac -strict experimental -map 0:v -map 1:a {path}csdn\{title}.mp4 -loglevel quiet # -loglevel quiet 表示隐藏日志不加问题不大os.system(cmd) # 调用windows命令print(视频和音频合并完成) # 合并后会生成新的.MP4文件os.remove(f{path}{title}.mp4) # 删除原有的视频文件os.remove(f{path}{title}.mp3) # 删除原有的音频文件print(f已删除原有的视频和音频文件)print(---*10)# 6、启动函数
def start(path):# 依次调用定义的函数完成视频抓取html_data, json_data get()title, video_url, audio_url parse(html_data, json_data)save(title, video_url, audio_url, path)craft(path, title)if __name__ __main__:path F:/videoDownload/ # 视频存放的路径大家自定义start(path)执行效果