一直想要爬弹幕的,本来以为挺高级的,事实上也是挺高级的,哈哈!终于完成弹幕的爬取和词云的制作了!
跟大家分享下经验吧!
去哔哩哔哩网站找一个mv
如果是谷歌的浏览器就比较方便了,右键检查,点击Network,然后要更新,弹幕的文本文件有时候是找不到的,所以先找到一个名为pagelist的json文件,右键open in the web,就可以找到cid了,然后利用cid可以获得弹幕的url链接,chardet.detect主要是对获得的网页进行解码,关键在于只能对字节型解码。最后利用正则表达式匹配中文字符串!动手试一试吧!
import requests
import json
import chardet
import re
# 根据pagelist?bvid请求得到cid
def get_cid():
url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp'
res = requests.get(url).text
# 获取网页的具体内容,且为非字节型网页内容
# res.content生成字节型字符串
json_dict = json.loads(res)
# 导入json文件
return json_dict['data'][0]['cid']
# 根据cid请求弹幕,解析弹幕得到最终的数据
def get_data(cid):
final_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + str(cid)
# 获取弹幕的url链接
final_res = requests.get(final_url)
final_res.encoding = chardet.detect(final_res.content)['encoding']
# chardet.detect只能对字节型进行解码
final_res=final_res.text
# .text获取网页具体内容
pattern=re.compile('<d.*?>(.*?)</d>')
# (.*)整个字符串,\"匹配”,\s+匹配一个以上的空白符,\<匹配一个<,^表示开bai始,$表示结束
data = pattern.findall(final_res)
return data
def save_to_file(data):
with open('dan_mu.text',"w",encoding='utf-8') as f:
for i in data:
f.write(i)
f.write('\n')
# 换行符
cid=get_cid()
data=get_data(cid)
save_to_file(data)