大家好,我是老表~
这几天一直有小伙伴问B站上的视频数据是怎么获取的,今天就来给大家分享一下批量获取B站视频数据的方式。
大家也可以看看前天发的该死!B 站上这些 Python 视频真香!
即学即用~
01
页面分析
B站的反爬虫技术是信息校验型反爬虫中的cookie反爬虫,我们需要在爬取数据的时候加上cookie,即可绕过该其反爬虫机制。有不懂怎么绕过的小伙伴可以看看这篇文章学会Cookie,解决登录爬取的困扰!。
登陆之后,我们在搜索框随便输入一个想要获取数据的视频名称,我这里以输入Python为例。输入后,我们寻找一下数据的存储位置,我们发现数据存储在源网页中。
02
数据采集
在上面我们已经找到了数据的存储位置了,现在只需要将它给采集出来即可。
通过对页面的观察我们发现,数据是存储在页面的标签中的。那么我们用BS4对数据进行爬取是最方便的。
提取数据的核心代码如下:
import requests
from bs4 import BeautifulSoup
import re
import csv
import time
params = (
('keyword', 'python'),
('page', str(page)),
)
response = requests.get('https://search.bilibili.com/video', headers=headers, params=params)
soup = BeautifulSoup(response.text,'html.parser')
zong = soup.find('ul',class_='video-list clearfix')
for i in zong.find_all('li'):
title = i.find(class_='headline clearfix').find('a').text
bofang = i.find(class_='so-icon watch-num').text.split()[0]
danmu = i.find(class_='so-icon hide').text.split()[0]
shangchuanshijian = i.find(class_='so-icon time').text.split()[0]
upzhu = i.find(class_='up-name').text.split()[0]
href = re.findall('(www.*)', i.find('a')['href'])[0]
with open('123.csv', 'a', newline='') as f:
writer = csv.writer(f)
try:
writer.writerow([title,bofang,danmu,shangchuanshijian,upzhu,href])
except:
pass
让我们来看看爬取的效果:
03
批量爬取
我发现,在params参数中,有一个keyword参数,当改变这个参数的值时,即可获取相应参数的信息。核心代码如下:
keywords = []
for keyword in keywords:
for page in range(1,51):
params = (
('keyword', keyword),
('page', str(page)),
)
04
小结
1. 以上就是批量爬取B站视频数据的方法。
2. 本文仅供大家学习参考,不做商用。