zoukankan      html  css  js  c++  java
  • python爬虫实战之bilibili弹幕生成云图

    突然想到了这个题目,先开了题,看能不能一次搞定,#后记,花了两天时间搞定的,一直想用自己的方法爬,但是效果都不好

    首先去分析一下bilibili的网站请求,但是弹幕的异步传输的包抓不到(或者隐藏的好,或者是我技术水平有限),然后网上比较一致的看法是在JS里暴露了一个弹幕xml文件的id,然后用一个新的请求把xml文件下载下来,然后分析。

    大体思路是:用avid去拿到cid,cid获取到弹幕文件,解析弹幕文件,生成云图

     搞了两天,先把代码扔上来

    from selenium import webdriver
    from bs4 import BeautifulSoup
    import re
    from wordcloud import WordCloud
    from scipy.misc import imread
    import matplotlib.pyplot as plt
    
    driver=webdriver.PhantomJS()
    driver.get('http://www.bilibili.com/video/av15719999/')  #用的是selenium和webdriver,试过用requests库的get方法,不成功
    soup = BeautifulSoup(driver.page_source,'lxml')          #把返回的html解析出来
    
    sc = soup.find('script',text=re.compile("EmbedPlayer*"))#找到有特定词‘EmbedPlayer’的script标签
    sc1 =str(sc)  #截取cid的值
    a = sc1.find('cid=');  
    b = sc1.find('&');
    sc2=sc1[a+4:b]
    # print(sc2)
    driver.get(
    "http://comment.bilibili.com/"+sc2+".xml") #这个是重点,通过刚才拿到的cid去把弹幕的xml文件拿下来 soupxml = BeautifulSoup(driver.page_source,'lxml') ds =soupxml.find_all('d')#拿到所有的弹幕节点 cuttext ='' for d in ds: cuttext = cuttext+' '+str(d.text);#使用一个字符串把文件串起来 #print(cuttext)
    #初始化词云 color_mask = imread("425176.jpg") # 读取背景图片 cloud = WordCloud( # 设置字体,不指定就会出现乱码,这个文件是字体文件,可以去网上下载一个,然后写上路径 font_path="SourceHanSerif-Heavy.ttc", # 设置背景色 background_color='white', # 词云形状,就是刚才读取的背景图片 mask=color_mask, # 允许最大词汇,出os报错的时候可能就是这个设置过大了 max_words=100, # 最大号字体,出os报错的时候可能就是这个设置过大了 # max_font_size=40 ) word_cloud = cloud.generate_from_text(cuttext) # 产生词云 word_cloud.to_file("3.png") # 保存图片 # 显示词云图片 plt.imshow(word_cloud) plt.axis('off') plt.show()

    不嫌弃的话可以访问我的个人主页,已经把功能集成到上边去了。在Funs功能列表中

    http://1163949417-jack.55555.io/west/main/

  • 相关阅读:
    简单学习MyBatis
    探讨AOP的两种实现方式
    浅析Spring AOP术语
    依赖注入(DI)的迭代实现
    初识依赖注入(DI)
    Bean工厂ApplicationContext
    ps文章推荐
    ueditor全屏和el-dialog模态框有冲突的解决方法(其他框架请比葫芦画瓢)
    (各种转载)
    element-ui修改样式不生效的官网解决方式
  • 原文地址:https://www.cnblogs.com/Jacck/p/7751721.html
Copyright © 2011-2022 走看看