爬取B站UP主的所有视频细节信息
1. 前言
使用python来爬取B站UP的视频信息,在此之前需要安装一下模块
pip3 install selenium
pip3 install bs4
selenium是一个操作浏览器的Python库,需要安装相应的浏览器驱动。请自行安装。
本文实现了一个可以通过输入B站某个UP主的名字来进行爬取视频信息。
2. 爬取信息的数据结构
爬取的信息存储到JSON中,为以下组织方式:
{
'name': XXX // 视频名称
'author': XXX //作者名称
'date': XXX //发布时间
'url': XXX //视频链接
'wachted': XXX //观看次数
'bullet_comments' XXX //弹幕数量
'liked': XXX //点赞数量
'coin': XXX //投币数量
'collected': XXX //收藏数量
'shared': XXX //收藏数量
'now_date': XXX //获取信息时间
}
以下为爬取到的信息:
3. 程序说明及注意
3.1 爬取不同UP主
通过更改代码中的
def get_page(upuser_name)
upuser_name 字段的值,可以实现爬取不同UP的视频信息。
3.2 错误说明
当爬取到数据为空时,是由于使用selenium未将网页加载出来,可将其后面sleep值调整的大一点(这里的大小和自己电脑的性能和网络有关,可以先自己操作浏览器判断需要时间,浏览器->F12->Network 刷新一下就可以看到)。
3.3 数据存储
由于爬取的时间较长,可以采用边爬取边存储的方式,以防设备出现故障(本文未采用)。
4. 代码
具体的信息在代码注释都有说明,自行查阅。
# 爬取bilibili up主的视频信息
'''
{
'name': XXX // 视频名称
'author': XXX //作者名称
'date': XXX //发布时间
'url': XXX //视频链接
'wachted': XXX //观看次数
'bullet_comments' XXX //弹幕数量
'liked': XXX //点赞数量
'coin': XXX //投币数量
'collected': XXX //收藏数量
'shared': XXX //收藏数量
'now_date': XXX //获取信息时间
}
'''
from selenium import webdriver
import re
import json
from bs4 import BeautifulSoup
import time
from urllib import parse as url_parse
import datetime
class BSpider():
def __init__(self):
# 某个up主的视频页面,只需对pagenum字段进行替换切换不同的页面
options = webdriver.FirefoxOptions()
options.add_argument('--headless')
self.main_url = 'https://space.bilibili.com/upuser_id/video?tid=0&page=page_num&keyword=&order=pubdate'
self.browser = webdriver.Firefox(options=options)
def close_webdriver(self):
# 关闭相关驱动
self.browser.quit()
def locate2upuser(self, name_string):
# 通过名字定位到该up主的ID号
# url中文编码
name_string = url_parse.quote(name_string)
self.browser.get('https://search.bilibili.com/upuser?keyword='+name_string+'&page=1&order=fans&