从网页抓取视频(就是通过Python网络爬虫技术,基于selenium库实现视频选集的获取 )
优采云 发布时间: 2021-12-27 12:02从网页抓取视频(就是通过Python网络爬虫技术,基于selenium库实现视频选集的获取
)
一、背景介绍
说到B站,第一印象就是视频。相信很多朋友和我一样,都想通过网络爬虫技术来获取B站的视频,但是B站的视频其实并没有那么容易获取。关于B站的视频采集,之前已经通过you-get库介绍过。
言归正传,经常在B站学习的朋友可能经常会遇到一些博主连载几十个甚至上百个视频,尤其是这种编程语言、课程、工具使用等连续教程。出现一个选集系列,如下图所示。
当然,这些选集的领域也是我们肉眼可见的。如果仅仅通过程序来实现,可能并没有想象的那么简单。所以本文的目标是使用Python网络爬虫技术,基于selenium库,实现视频选集的获取。
二、 具体实现
我们在本文中使用的库是 selenium。这是一个模拟用户登录的库。虽然感觉很慢,但是这个库在网络爬虫领域还是用的比较多。用它来模拟登录,获取数据已经试过了。以下是实现视频选集采集
的全部代码,欢迎大家自己实践。
# coding: utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
class Item:
page_num = ""
part = ""
duration = ""
def __init__(self, page_num, part, duration):
self.page_num = page_num
self.part = part
self.duration = duration
def get_second(self):
str_list = self.duration.split(":")
sum = 0
for i, item in enumerate(str_list):
sum += pow(60, len(str_list) - i - 1) * int(item)
return sum
def get_bilili_page_items(url):
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 设置无界面
options.add_experimental_option('excludeSwitches', ['enable-automation'])
# options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2,
# "profile.managed_default_content_settings.flash": 0})
browser = webdriver.Chrome(options=options)
# browser = webdriver.PhantomJS()
print("正在打开网页...")
browser.get(url)
print("等待网页响应...")
# 需要等一下,直到页面加载完成
wait = WebDriverWait(browser, 10)
wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@class="list-box"]/li/a')))
print("正在获取网页数据...")
list = browser.find_elements_by_xpath('//*[@class="list-box"]/li')
# print(list)
itemList = []
second_sum = 0
# 2.循环遍历出每一条搜索结果的标题
for t in list:
# print("t text:",t.text)
element = t.find_element_by_tag_name('a')
# print("a text:",element.text)
arr = element.text.split('\n')
print(" ".join(arr))
item = Item(arr[0], arr[1], arr[2])
second_sum += item.get_second()
itemList.append(item)
print("总数量:", len(itemList))
# browser.page_source
print("总时长/分钟:", round(second_sum / 60, 2))
print("总时长/小时:", round(second_sum / 3600.0, 2))
browser.close()
return itemList
get_bilili_page_items("https://www.bilibili.com/video/BV1Eb411u7Fw")
这里使用的选择器是xpath,使用的视频示例是B站同济版《高等数学》的完整教学视频(宋浩老师),如果想抓取其他视频选集,只需要改上面代码的最后一部分。一行 URL 链接就足够了。
三、常见问题
在运行的过程中,朋友们应该经常会遇到这个问题,如下图所示。
这是由 Google 驱动程序版本问题引起的。只需按照提示下载相应的驱动程序版本即可。驱动下载链接:
https://chromedriver.storage.googleapis.com/index.html