从网页抓取视频(就是通过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

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线