上次尝试了利用Ajax机制爬取B站视频播放量等数据(链接在下方),但是发现响应的JSON数据中没有发布时间的数据,这次决定用Selenium试一下。
python爬虫:Ajax爬取B站视频标题、播放量、评论量 .

Selenium

Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面源代码,做到可见即可爬。相比于之前的爬虫它的速度会慢一些,但不会被Ajax动态加载等反爬机制干扰,可以直接进入开发者模式查找元素。

先来看一下爬取的这个页面,是b站一位up主的主页,全部视频共有21页。
在这里插入图片描述
接下来导入库。

from selenium import webdriver
from selenium.webdriver import ChromeOptions
import pandas as pd

声明浏览器对象并定义URL,URL包含一个page参数,代表当前页面。

option = ChromeOptions()
option.add_argument('--headless')
browser = webdriver.Chrome(options=option)
browser.implicitly_wait(10) 
INDEX_URL = 'https://space.bilibili.com/390461123/video?tid=0&page={page}&keyword=&order=pubdate'
TOTAL_PAGE = 21

这里加上“headless”这个参数后运行时就不会跳出一个新的浏览器窗口。implicitly_wait是设置隐式延时等待,防止出现找不到元素的错误(页面加载不及时)。
我们再定义几个list保存爬取的数据。

title_list, play_list, time_list = [], [], []

接下来我们打开浏览器开发者模式,查找我们需要的元素。
在这里插入图片描述
找到了元素的class,我们就可以用css选择器来选取元素。

def scrape_index(page):
    url = INDEX_URL.format(page=page)
    browser.get(url)
    title = browser.find_elements_by_css_selector('.small-item .title')
    play = browser.find_elements_by_css_selector('.small-item .play')
    time = browser.find_elements_by_css_selector('.small-item .time')
    for item in title:
        title_list.append(item.text)
    for item in play:
        play_list.append(item.text)
    for item in time:
        time_list.append(item.text)        

这里定义了一个爬取页面的方法,把页码作为参数传进去。再用css选择器获取节点。获取的节点的类型都是 WebElement,多个节点以列表形式返回。再用text方法获取节点的文本属性即可。

开始爬取,并将结果存入dataframe。

for page in range(1, TOTAL_PAGE + 1):
    scrape_index(page)
data = {'title': title_list,
        'play': play_list,
        'time': time_list}
df = pd.DataFrame(data)

结果如下。
在这里插入图片描述
OK,完成。
简单地分析一下数据。

df[df['title'].str.contains("斤")]

在这里插入图片描述
包含“斤”字的标题有283个。

df[df['title'].str.contains("过瘾")]

在这里插入图片描述
包含“过瘾”的标题有352个。
这或许是高播放量的秘诀之一?

上次尝试了利用Ajax机制爬取B站视频播放量等数据(链接在下方),但是发现响应的JSON数据中没有发布时间的数据,这次决定用Selenium试一下。python爬虫:Ajax爬取B站视频标题、播放量、评论量.SeleniumSelenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面源代码,做到可见即可爬。相比于之前的爬虫它的速度会慢一些,但不会被Ajax动态加载等反爬机制干扰,可以直接进入开发者模式查找元素。具体实现先来看一下
声明:本博客只是简单的爬虫示范,并不涉及任何商业用途。 一.Selenium简介 最近博主在学习爬虫的过程中遇到了一个强无敌的工具—Selenium,通过它使得我们的爬虫过程可以像真正的用户在手工操作一般十分有趣,下面我将给大家一些干货,有兴趣的童鞋可以学习学习: Selenium的安装:可以直接使用pip命令 某大佬的中文教程 另一大佬的学习笔记 在本文中只是简单涉及到了获以及操作网页中的某些元素等一些基本用法,因此文中不做详细说明。 二.网页分析 三.爬虫过程 四.源代码
文章目录一、什么是爬虫二、Selenium实现爬虫的基本流程三、环境搭建1.前置条件2.Selenium安装1.示意2.验证3.ChromeDriver安装总结 一、什么是爬虫 爬虫: 一段自动抓互联网信息的程序,从互联网上抓对于我们有价值的信息。 从技术层面来说就是:通过程序模拟浏览器请求点的行为,把点返回的HTML代码/JSON数据/二进制数据(图片、视频到本地,进而提自己需要的数据,存放起来使用; 二、Selenium实现爬虫的基本流程 分析网页结构 连接浏览器 打开指定的页面.
查找要内容的页面的url,使用requests库获响应内容 内容为html源码则使用BeautifulSoup等工具解析html源码,得到想要的数据 内容为Json则直接转为Json对象解析 但今天我发现了selenium这个工具,selenium是一套完整的web应用程序测试系统,可以用它来模拟真实浏览器进行测试。在爬虫中使用它的...