zoukankan      html  css  js  c++  java
  • python爬取B站弹幕学习笔记

    首先打开B站地址:https://www.bilibili.com/video/av73262911

    然后打开检查,选择net

     查找到list.so这个文件,找到我们需要的地址:

    https://api.bilibili.com/x/v1/dm/list.so?oid=125428649

    这个地址就是存放弹幕的文件

    接下来我们之间用request模块去get文本,BeautifulSoup去处理获取文字,然后导入到词云

    # 导入扩展库
    import re  # 正则表达式库
    import collections  # 词频统计库
    import numpy as np  # numpy数据处理库
    import jieba  # 结巴分词
    import wordcloud  # 词云展示库
    from PIL import Image  # 图像处理库
    import matplotlib.pyplot as plt  # 图像展示库
    import requests  # 网络爬取
    from bs4 import BeautifulSoup  # html解析
    
    url = "https://api.bilibili.com/x/v1/dm/list.so?oid=125428649"  # 弹幕地址
    page = requests.get(url)  # 获取文本
    page.encoding = 'utf-8'
    soup = BeautifulSoup(page.text, 'html.parser')
    content = soup.find_all('d')
    string_data = ''
    for i in content:
        string_data = string_data + i.text
    print(string_data)
    
    # 文本预处理
    pattern = re.compile(u'	|
    |.|-|:|;|)|(|?|"|(|)|《|》|:|?|!')  # 定义正则表达式匹配模式,匹配所有的标点空格,u是标志Unicode的编码字符
    string_data = re.sub(pattern, '', string_data)  # 将符合模式的字符去除
    
    # 文本分词
    seg_list_exact = jieba.cut(string_data, cut_all=False)  # 精确模式分词
    object_list = []
    remove_words = [u'', u'', u'', u'', u'随着', u'对于', u'', u'', u'', u'', u'', u' ', u'', u'', u'', u'',
                    u'通常', u'如果', u'我们', u'需要']  # 自定义去除词库
    
    for word in seg_list_exact:  # 循环读出每个分词
        if word not in remove_words:  # 如果不在去除词库中
            object_list.append(word)  # 分词追加到列表
    
    # 词频统计
    word_counts = collections.Counter(object_list)  # 对分词做词频统计
    word_counts_top10 = word_counts.most_common(10)  # 获取前10最高频的词
    print(word_counts_top10)  # 输出检查
    # print(word_counts)
    
    # 词频展示
    mask = np.array(Image.open('xin.jpg'))  # 定义词频背景
    wc = wordcloud.WordCloud(
        font_path='C:/Windows/Fonts/simhei.ttf',  # 设置字体格式
        background_color="white",
        mask=mask,  # 设置背景图
        max_words=200,  # 最多显示词数
        # max_font_size=100  # 字体最大值
    )
    
    wc.generate_from_frequencies(word_counts)  # 从字典生成词云
    image_colors = wordcloud.ImageColorGenerator(mask)  # 从背景图建立颜色方案
    wc.recolor(color_func=image_colors)  # 将词云颜色设置为背景图方案
    plt.imshow(wc)  # 显示词云
    plt.axis('off')  # 关闭坐标轴
    plt.show()  # 显示图像
    View Code

    效果如下:

     




  • 相关阅读:
    箭头函数和普通函数的区别是什么?
    前端如何优化网站性能?
    instanceof原理
    call、apply区别
    函数的节流和防抖
    关于this的指向性问题
    undefined 和null的区别?
    浅谈堆和栈的理解?
    关于vue中watch和computed
    简单说一下什么是回流和重绘
  • 原文地址:https://www.cnblogs.com/Json-Five/p/11908785.html
Copyright © 2011-2022 走看看