爬取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('<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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是具体步骤: 首先,我们需要导入所需的库,包括 requests、BeautifulSoup、jieba 和 wordcloud。 ```python import requests from bs4 import BeautifulSoup import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt ``` 接下来,我们需要爬取百度热搜的页面内容,并使用 BeautifulSoup 进行解析,提取出热搜的关键词列表。 ```python url = 'http://top.baidu.com/buzz?b=1&fr=topindex' html = requests.get(url).text soup = BeautifulSoup(html, 'html.parser') hot_list = [] for item in soup.select('.list-table tr'): try: hot_list.append(item.select('.keyword a')[0].text) except: pass ``` 接下来,我们需要将关键词列表进行分词,并使用 jieba 库来进行分词操。 ```python text = ' '.join(jieba.cut(''.join(hot_list))) ``` 接下来,我们就可以利用 WordCloud 库生成词云图了。首先,我们需要先设置一下词云图的参数,包括背景颜色、字体、图片尺寸等。然后,我们可以使用 `generate()` 函数来生成词云图。 ```python wordcloud = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600).generate(text) ``` 最后,我们可以使用 matplotlib.pyplot 库中的 `imshow()` 函数来显示词云图。 ```python plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() ``` 完整代码如下: ```python import requests from bs4 import BeautifulSoup import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt url = 'http://top.baidu.com/buzz?b=1&fr=topindex' html = requests.get(url).text soup = BeautifulSoup(html, 'html.parser') hot_list = [] for item in soup.select('.list-table tr'): try: hot_list.append(item.select('.keyword a')[0].text) except: pass text = ' '.join(jieba.cut(''.join(hot_list))) wordcloud = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600).generate(text) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() ``` 执行完上述代码后,就可以得到一张基于百度热搜关键词的词云图了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值