上次尝试了利用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)
df

结果如下。

OK,完成。
简单地分析一下数据。

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


包含“斤”字的标题有283个。

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


包含“过瘾”的标题有352个。
这或许是高播放量的秘诀之一?

python爬虫:Selenium爬取B站视频标题、播放量、发布时间相关推荐

  1. python爬虫_爬取B站视频标题

    着手写爬虫前,需要了解的几个概念: URL 全称 Uniform Resource Locator (统一资源定位器),格式为:协议+主机+端口+路径. 比如:https://www.bilibili ...

  2. python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...

    学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...

  3. python抓取视频违法吗,科学网—【python爬虫】抓取B站视频相关信息(一) - 管金昱的博文...

    昨天我在B站上写了这么一篇文章,但是被他们锁住了.无奈之下我复制到知乎上先保存起来 在这篇名为<三天学会用python进行简单地爬取B站网页视频数据>文章中我主要提到了两点在已知aid的情 ...

  4. python用selenium爬取b站评论并制作词云图

    文章目录 前言 一.爬取b站评论 1.selenium配置 2.代码 二.制作词云图 1.下载停用词 2.代码 3.注意事项 三.制作成品 1.初期成品 2.成品 前言 b站视频下的评论是下拉加载的. ...

  5. 如何去使用Python爬虫来爬取B站的弹幕数据?

    哔哩哔哩众所周知是弹幕的天堂,视频观看人数越多,弹幕也就越多.今天小千就来教大家如何去使用Python开发一个爬虫来爬取B站的弹幕数据. 1.弹幕哪里找? 平常我们在看视频时,弹幕是出现在视频上的.实 ...

  6. [python爬虫] Selenium爬取内容并存储至MySQL数据库

    前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息.通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的.这篇文章主要讲述通过Selenium ...

  7. Python爬虫——selenium爬取网易云评论并做词云

    大家好!我是霖hero 到点了上号网易云,很多人喜欢到夜深人静的时候,在网易云听音乐发表评论,正所谓:自古评论出人才,千古绝句随口来,奈何本人没文化,一句卧槽行天下!评论区集结各路大神,今天我们来爬取 ...

  8. [python爬虫] selenium爬取局部动态刷新网站(URL始终固定)

    在爬取网站过程中,通常会遇到局部动态刷新情况,当你点击"下一页"或某一页时,它的数据就进行刷新,但其顶部的URL始终不变.这种局部动态刷新的网站,怎么爬取数据呢?某网站数据显示如下 ...

  9. python爬虫之使用selenium爬取b站视频信息

    前言 在之前提到爬虫时,我想到的步骤大多是: 查找要爬取内容的页面的url,使用requests库获取响应内容 内容为html源码则使用BeautifulSoup等工具解析html源码,得到想要的数据 ...

最新文章

  1. 实验Matlab数值运算,MATLAB数值实验一(数据的插值运算及其应用完整版
  2. ubuntu 挂在smb服务器的方法
  3. modelsim显示状态机名称的方法
  4. SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群... 1
  5. 如何通过图片识别用的什么字体?
  6. 揭密 GaussDB T 主备物理复制搭建过程(全)
  7. linux线程同步 eventfd,用 eventfd 在线程之间通信
  8. 【报告分享】华为2019年财报.pdf(附下载链接)
  9. opencv 处理黑夜_基于 opencv图像去噪
  10. bzoj3620 似乎在梦中见过的样子
  11. PR开场片头视频模板 多帧城市闪点社交媒体短视频pr模板
  12. 无线路由器密码破解-BT3-spoonwep2
  13. wangeditor光标乱跑,回车换行又返回来问题
  14. Vue项目设置局域网链接访问
  15. Kubernetes Pod调度策略
  16. kernel编译错误R_ARM_THM_JUMP19
  17. matlab的置换,来自CLUSTERGRAM对象的置换向量(MATLAB)
  18. 按照网络规模来分,服务器分为哪几类?
  19. erc20根据合约地址获取所有交易记录
  20. instanceof java 报错_java中instanceof怎么理解?java中instanc 爱问知识人

热门文章

  1. 点的旋转(4):四元数的乘法
  2. ElasticSearch之中文、拼音分词
  3. 怎样优化电商购物流程?
  4. 极简视频录制/剪辑工具-Camtasia Studio9
  5. 【CSS 文字渐变、背景渐变实现方式】
  6. 基于PHP+MySQL高校教务选课系统的设计与实现
  7. 人工智能+看病快准佳
  8. 【附源码】Java计算机毕业设计安卓电影院售票管理APP论文(程序+LW+部署)
  9. 微型计算机控制技术第一章绪论
  10. java.io.IOException: exception unwrapping private key - java.security.InvalidKeyException