zoukankan      html  css  js  c++  java
  • python实现爬取指定bilibili视频的弹幕并制作词云

        先看下最终实现的效果

     具体实现思路是

        1.爬取带有弹幕信息的网页

        2.处理爬取得到的内容并提取所需要的弹幕信息,然后写入文本中

        3.通过词云库将文本处理成想要的图片

    所需要用到的库

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    import re
    import jieba
    from wordcloud import WordCloud
    from scipy.misc import imread
    import matplotlib.pyplot as plt

    首先爬取想要的信息

    ps(哔哩哔哩的弹幕全部保存在  http://comment.bilibili.com/122512779.xml  中,红色字体为该视频的cid,可以在当前视频页通过:查看网页源代码—ctrl+f查找cid-出现的第一个9位cid,来获取)

    url = 'http://comment.bilibili.com/.xml' #对方的url
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
    res = requests.get(url=url, headers=header) #向对方网页发送请求
    res.encoding = res.apparent_encoding #将编码设置为对方网页的编码,确保不会出现乱码
    data = res.text #获取文本
    soup = BeautifulSoup(data, 'lxml') #进行过滤操作,需要用到lxml包,无需导入。pip install lxml
    d_list = soup.find_all('d')  #获取所有的d标签中的内容

    然后提取其中的弹幕,将其放入文本中,最后通过jieba库处理成词语

    dlst = []
    for d in d_list:  # 循环拿出所有的d标签
        danmu = {}
        danmu['弹幕'] = d.text  # 获取文本信息
        # danmu['时间'] = datetime.datetime.now()
        # danmu['路径'] = url
        dlst.append(danmu)
    df = pd.DataFrame(dlst)  # 转换成二维数组,类似于execl表格
    
    f = open('sign.txt', 'w', encoding='utf-8')  # 打开文件
    for i in df['弹幕'].values:  # 循环所有的文本信息
        pat = re.compile(r'[一-龥]+')  # 定义过滤数据的规则,所有的汉字
        filter_data = re.findall(pattern=pat, string=i)  # 执行过滤操作
        f.write("".join(filter_data))  # 写入文本
    f.close()
    
    
    f = open('sign.txt', 'r', encoding='utf8')
    data = f.read()
    result = " ".join(jieba.lcut(data))
    f.close()

    最后通过wordcloud库提供的方法将其转化为图片

    color_mask = imread('th.png')
    
    wc = WordCloud(
        font_path=r'C:\Windows\Fonts\STKAITI.TTF',
        width=1000,
        height=800,
        mask=color_mask,
        background_color='black'
    )
    
    wc.generate(result) #读取文本数据
    
    wc.to_file('bili.jpg') #输出图片
    
    plt.imshow(wc)
    plt.show()
  • 相关阅读:
    食谱
    食谱
    食谱
    无题
    Appium+python 自动发送邮件(2)(转)
    Appium+python 自动发送邮件(1)(转)
    Appium+python HTML测试报告(2)——一份报告模板(转)
    Appium+python HTML测试报告(1)(转)
    Appium+python的单元测试框架unittest(4)——断言(转)
    Appium+python的单元测试框架unittest(3)——discover(转)
  • 原文地址:https://www.cnblogs.com/huahongzhenghexiu/p/11771522.html
Copyright © 2011-2022 走看看