爬取MV弹幕,制作词云图(一)

一直想要爬弹幕的,本来以为挺高级的,事实上也是挺高级的,哈哈!终于完成弹幕的爬取和词云的制作了!
跟大家分享下经验吧!

去哔哩哔哩网站找一个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('(.*?)')
    # (.*)整个字符串,\"匹配”,\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)

你可能感兴趣的:(爬虫)