当前位置: 首页 > news >正文

b站视频全自动化爬虫,采用抓包,基于selenium(学习使用)

首先导入所需要的库

import requests from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.edge.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options import time import re import requests import json import os

然后进行初始化抓包、驱动配置等(这里采用的是谷歌浏览器)

#初始化 chrome_options = Options() chrome_options.add_argument('--disable-blink-features=AutomationControlled') chrome_options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.7632.160 Safari/537.36') chrome_options.set_capability('goog:loggingPrefs', {'performance': 'ALL'}) service = Service(executable_path=r"D:\aitems\ktv\chromedriver.exe") browser = webdriver.Chrome(service=service,options=chrome_options) browser.execute_cdp_cmd('Network.enable',{})

然后我们采用selenium找到我们需要的网页,这里我采用的是自己输入搜索,利用xpath等检索搜索到的第一个视频

name = input() search_box = browser.find_element(By.XPATH, '//*[@id="nav-searchform"]/div[1]/input') search_box.send_keys(name) search_button = browser.find_element(By.XPATH,'//*[@id="nav-searchform"]/div[2]') search_button.click() windows = browser.window_handles browser.switch_to.window(windows[-1]) first_video = browser.find_element(By.CSS_SELECTOR, ".bili-video-card:first-child") first_video.click() windows = browser.window_handles browser.switch_to.window(windows[-1]) video_content = browser.find_element(By.XPATH, '/html/head/meta[14]') video_url = video_content.get_attribute('content') print("视频链接:",video_url)

这里我们把视频的链接找到之后,然后进行抓包来寻找视频下载的链接

#抓网络包 logs = browser.get_log('performance') print(f"7. 捕获到 {len(logs)} 个性能日志") count = 0 for entry in logs: # 第一步:解析日志条目(JSON字符串转Python字典) message = json.loads(entry['message']) # 第二步:筛选出"网络响应已接收"类型的日志 if message['message']['method'] == 'Network.responseReceived': request_id = message['message']['params']['requestId'] # 第三步:提取响应的核心信息 response = message['message']['params']['response'] url = response['url'] # 第四步:筛选我们关心的视频相关API请求 if 'bilibili.com' in url: count += 1 # print(f"8. 找到第{count}个B站请求:{url}") # 第五步:通过requestId获取完整的响应体内容 try: res = browser.execute_cdp_cmd('Network.getResponseBody', {'requestId': request_id}) # 第六步:处理并保存响应体 if res.get('body'): body = res['body'] # print(f"9. 响应体长度:{len(body)}") print(f"10. 完整响应体内容:\n{body}") # with open('d:\\aitems\\ktv\\backend\\first_response.txt', 'w', encoding='utf-8') as f: # f.write(body) # print("\n11. 响应体已保存到 first_response.txt") break else: print() # print(f"9. 响应体为空,继续查找...") except Exception as e: # print(f"9. 获取响应体失败:{str(e)},继续查找...") continue

在我们进行完抓包下载检索之后,得到了视频和音频的下载链接,由于b站的视频音频是分开来的,我们将他们进行合并。

video_baseurl = re.findall(r'"video":\[\{"id":.*?,"baseUrl"\s*:\s*"([^"]+)"',body) audio_baseurl = re.findall(r'"audio":\[\{"id":.*?,"baseUrl"\s*:\s*"([^"]+)"',body) print("视频url:",video_baseurl) print("音频url:",audio_baseurl) headers = { "User-Agent" : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36', 'Referer' : video_url, } video = requests.get(video_baseurl[0], headers=headers) audio = requests.get(audio_baseurl[0], headers=headers) with open('video.mp4', 'wb') as f: f.write(video.content) print('视频下载成功') with open('audio.mp3', 'wb') as f: f.write(audio.content) print('音频下载成功') code = 'ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 -shortest -y final_video.mp4' os.system(code)

到此,一个自动化视频搜索下载流程就完成了

比较关键的地方是寻找我们需要抓包和爬取的具体内容的位置,也就是视频和音频的下载链接在哪里。因为b站有反爬机制,所以我们采用抓包的方式进行爬虫。

如图

我们对"video"进行搜索就很容易可以找到我们需要的链接,同样的,音频是"audio"。

然后我们对此进行抓包和利用正则表达式寻找内容即可。

http://www.jsqmd.com/news/449578/

相关文章:

  • AI模型部署对比:OpenClaw本地部署与星图GPU一键部署DeOldify的优劣分析
  • GME多模态向量-Qwen2-VL-2B创意应用:辅助生成AE视频剪辑的智能标签与片段管理
  • Fish Speech 1.5快速部署:镜像预加载+服务自动恢复机制详解
  • Windows 环境升级 triton-windows 修复 ptxas.exe DLL 崩溃问题
  • 用 NVIDIA API Key 同时做画图和语音:一套从实测到落地的技术方案
  • 救命神器!自考专属AI论文平台,千笔AI VS 云笔AI
  • Tauri 生态安全体系从代码提交到版本发布的全链路防护
  • H7-TOOL脱机烧录升级对NXP汽车级M7芯片S32K314支持
  • 性能问题定位记录-1
  • 编程计算消毒液配比,按场景(家居/餐具/皮肤)生成安全浓度,避免刺激与失效。
  • Windows 配置 chatExcel-MCP完整踩坑指南
  • Qwen3-0.6B-FP8在Keil5开发环境中的辅助插件构想与实现思路
  • 3.7打卡
  • 多线程基础(2)
  • Leetcode使用最小花费爬楼梯的解法思考与回溯
  • 不踩雷!千笔ai写作,普遍认可的AI论文工具
  • 土豆矮砧密植:水肥一体化系统铺设全指南
  • DeepInnovator专攻一件事:让LLM自己想出科研新点子
  • 信息奥赛一本通—编程启蒙(3366:【例63.2】 回形方阵)
  • Uniapp微信小程序:自定义海报生成方案。支持保存到本地,二维码生成,富文本解析(个人学习记录)
  • Legal RAG Bench:当检索拖了后腿,大模型再聪明也白搭
  • Qwen-Image-2512-SDNQ Web服务部署教程:防火墙端口开放与公网访问安全配置
  • 虚拟机常见问题
  • Janus-Pro-7B企业实操:客服中心图片工单理解+标准化回复生成
  • 9K 条数据训 4B 模型,逼近 DeepSeek-R1?CHIMERA 用合成数据破解推理冷启动难题
  • 学长亲荐!千笔AI,研究生论文写作神器
  • 安晋捷运(深圳)国际物流有限公司安井株式会社日本专线物流服务
  • prometheus告警-以CPU使用率告警为例
  • 查重35%、AI概率80%?别删内容!百考通用语义重构双降达标
  • 独立开发者出海收款指南:用 Wise 打通 App Store 海外收入