B站(哔哩哔哩)视频目录提取脚本

前言

最近在整理视频内容,需要用到之前B站上传的一个视频集合内容的目录

要求如下:

1.提取目录的文字

2.在目录前加上序号(B站是不显示集数的)

分析网页格式

如图所示,图中位置就是我们需要提取的内容

其实是有一定规律的:

1.要么<div title=后面是视频标题

2.要么<div class="title-txt">后面是视频标题

所以我们有两种提取方法

<div title="社区使用方法 - 必看导学!" class="title"><div class="playing-gif" style="display:;"></div> <div class="title-txt">社区使用方法 - 必看导学!</div></div>

<div title="课前准备1-历史回顾与课前准备" class="title"><div class="playing-gif" style="display:none;"></div> <div class="title-txt">课前准备1-历史回顾与课前准备</div></div>

python1-min

测试

在实际测试过程中,发现B站前两个是视频选集和广告内容,所以要忽略掉。

python2-min

python3-min

最终代码

import requests
from bs4 import BeautifulSoup

url = "https://www.bilibili.com/video/BV1FP411B7b7"  # 替换成你关注的合集链接
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xx Safari/xx"
}

resp = requests.get(url, headers=headers)
resp.encoding = 'utf-8'

soup = BeautifulSoup(resp.text, "html.parser")

titles = []
for div in soup.find_all("div", class_="title"):
    # 尝试取 title 属性(通常是完整标题)
    t = div.get("title", "").strip()
    if not t:
        # 如果没有 title 属性,则尝试取子 div 的文本
        inner = div.find("div", class_="title-txt")
        if inner:
            t = inner.text.strip()
    if t:
        titles.append(t)

# 方法1:直接跳过前2个结果
print("方法1:跳过前2个结果")
for idx, t in enumerate(titles[2:], 1):  # 从第3个开始,索引从1开始
    print(idx, t)

# 方法2:先打印所有看看哪些是需要的
print("\n方法2:先查看所有结果")
for idx, t in enumerate(titles, 1):
    print(f"{idx}: {t}")

print(f"\n总共有 {len(titles)} 个标题")
print("如果你需要的是从第3个开始,可以使用 titles[2:]")

 

请登录后发表评论

    没有回复内容