爬虫项目:爬取B站UP主投稿视频BV号码
项目介绍
目标:幕雪elf
目的:获取对方投稿的所有稿件BV号码,用于下载视频
网站:BiliBili(哔哩哔哩)
前置:打开网页浏览器,访问B站并登录账户
所需软件:浏览器,python,VSCode,JJDown(唧唧)
备注:如需下载清晰度为1080p的视频则需要BiliBili大会员
上述了解并完成后我们安装 selenium库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
这个库比较大。其实在安装 selenium库的时候,同时安装了msedgedriver.exe
这是个浏览器驱动,我们可以简单的将他理解成selenium通过这个程序实现控制我们浏览器的作用。
注意:如果安装出现问题,导致msedgedriver.exe没有安装的话后续功能是无法实现的。
下面是完整代码:
from selenium import webdriver # 导入Selenium的webdriver模块,用于控制浏览器
from selenium.webdriver.common.by import By # 导入By类,用于指定查找元素的方法
from selenium.webdriver.edge.options import Options # 导入Edge浏览器的选项设置
import time # 导入time模块,用于等待操作
www_url = [] # 创建一个空列表,用于存储提取的视频链接
# 配置Edge浏览器选项以减少日志输出
edge_options = Options() # 创建一个Options对象,用于设置Edge浏览器的选项
edge_options.add_argument('--log-level=3') # 设置日志级别为3,以减少日志输出
browser = webdriver.Edge(options=edge_options) # 创建一个Edge浏览器实例,并应用上面设置的选项
browser.maximize_window() # 最大化浏览器窗口
browser.get('https://space.bilibili.com/677303839/video') # 打开指定的Bilibili视频页面
time.sleep(2) # 等待2秒,确保页面加载完成
ji_shu = 0 # 初始化一个计数器,用于记录翻页次数
# 获取元素并输出
for x in range(2,6): # 从第2页开始,到第5页结束
fan_ye = browser.find_element(By.XPATH, '//*[@id="submit-video-list"]/ul[3]/li[' + str(x) + ']') # 根据XPath查找翻页按钮
fan_ye.click() # 点击翻页按钮
ji_shu += 1 # 翻页次数加1
xd = x # 将当前页码赋值给xd变量
xd -= 1 # 计算实际的页面编号(因为是从第2页开始的)
time.sleep(1) # 等待1秒,确保页面加载完成
print() # 打印空行
print(f"第{xd}页") # 打印当前页码
if ji_shu == 4: # 如果翻页次数等于4
shang_xian = 27 # 设置上限为27
else: # 否则
shang_xian = 31 # 设置上限为31
for i in range(1,shang_xian): # 遍历每个视频
popular = browser.find_element(By.XPATH, '//*[@id="submit-video-list"]/ul[2]/li[' + str(i) + ']/a[1]') # 根据XPath查找视频链接
popular_video_id = popular.get_attribute('href') # 获取视频链接的href属性
www_url.append(popular_video_id[31:-1]) # 提取BV号并添加到列表中
print(str(i) + ":" + popular.get_attribute('href')) # 打印视频链接
time.sleep(10) # 等待10秒
print() # 打印空行
print() # 打印空行
print("以下是处理过的BV号:") # 打印提示信息
time.sleep(2) # 等待2秒
for y in range(len(www_url)): # 遍历www_url列表
print(www_url[y]) # 打印每个BV号
time.sleep(30) # 等待30秒
browser.quit() # 关闭浏览器
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Vincent Cassano