大家新年好!
这是第二期的爬虫与数据分析啦,很高兴新年里与大家再次见面!本次要实现的爬虫功能是:
爬取bilibili的弹幕,并把爬取的弹幕写入到excel中
首先,上B站找一个自己喜欢的视频,且弹幕量比较多的
(博主最近迷上了星辰大海,so……理所当然了,哈哈哈哈哈,真的很好听!)
视频的地址:https://www.bilibili.com/video/BV1my4y1n7fw?from=search&seid=12597893681774837581
好家伙!足足有756条的弹幕,看的出来,《星辰大海》很受大家的欢迎!
(很唯美的画风,良心up主!!!)
咳咳咳,好像偏题了,立即回归正题,咱们需要爬取这756条弹幕,并把它写入到excel文件中
首先明确:需要的第三方库有哪些:
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
显然,url直接放视频的地址是无法直接获取弹幕的。
弹幕在一个xml文件中,每个视频都有其对应的cid,只要合成一个新的comment的url即可获取全部的弹幕
获取弹幕的url格式为:
http://comment.bilibili.com/+cid+.xml
例如,打开星辰大海的mv弹幕url:
可以惊喜的发现,所有的弹幕都在其中
所以对此url进行解析获取数据即可
利用BeautifulSoup提取所有的标签
并且利用正则表达式对提取的标签再次提取字符串
最后用pandas写入excel中
源代码如下:
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
# 视频:星辰大海
# 网址:https://www.bilibili.com/video/BV1my4y1n7fw?from=search&seid=15687630829856273701
# 定义url和请求头
data_url = 'https://comment.bilibili.com/292945044.xml'
headers = {
'headers':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
# 发送请求
response = requests.get(data_url,headers=headers)
content = response.content.decode('utf-8')
# 实例化对象
soup = BeautifulSoup(content,'lxml')
# 提取数据
ds = soup.find_all('d')
bullet_chat = re.findall('">(.*?)<',str(ds))
df1 = pd.DataFrame(bullet_chat,columns=['弹幕'])
df1.to_excel('弹幕.xls')
运行结果如下:
比较简单,欢迎大家收藏与交流!