#!/usr/bin/python
# -*- coding: UTF-8 -*-
 

import urllib.request
import urllib.error
import re
from lxml import etree
import time
import pandas as pd
import sys
import jieba
import numpy    #numpy计算包
import matplotlib.pyplot as plt


 
import matplotlib
matplotlib.rcParams['figure.figsize'] = (10.0, 5.0)
from wordcloud import WordCloud#词云包


headers=("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)


comments = ''
try:
    for i in range(14,100):#因第13页存在乱码,暂无法解决,仅爬取前14页-100页
        url="https://p.comments.youku.com/ycp/comment/pc/commentList?jsoncallback=n_commentList&app=100-DDwODVkv&objectId=915073585&objectType=1&listType=0&currentPage="+str(i)+"&pageSize=30&sign=04b1133bd3b5d0e79f2cc2cc48121a9c&time=1531057086"
        data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
        patcom='"content":"(.*?)",'
        resultcom=re.compile(patcom).findall(data)
        
        for j in range(0,len(resultcom)):
            non_num = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
             
            resultcom[j]=resultcom[j].translate(non_num)
            resultcom[j]=eval("u'"+resultcom[j]+"'")
                    
            comments = comments + (str(resultcom[j])).strip()#为方便对数据进行清洗,我们将列表中的数据放在一个字符串数组
            pattern = re.compile(r'[\u4e00-\u9fa5]+')#清洗标点符号,至少匹配一个汉字的写法
            filterdata = re.findall(pattern, comments)
            cleaned_comments = ''.join(filterdata)#将序列中的元素以指定的字符连接生成一个新的字符串。
            

    segment = jieba.lcut(cleaned_comments)#返回list
    words_df=pd.DataFrame({'segment':segment})#segment列名
    stopwords=pd.read_csv("chineseStopWords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'], encoding='utf-8')#quoting=3全不引用,index_col为默认为None,即不指定行索引,系统自动加上行索引(0-),
    words_df=words_df[~words_df.segment.isin(stopwords.stopword)]#去掉在stopword中显示的文字,words_df的type仍然是DataFrame
    words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})#以segment分类,以计数对该列聚合,size()函数主要是用来统计矩阵元素个数
    words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)
    print(words_stat)


    wordcloud=WordCloud(font_path="Lib/site-packages/wordcloud/font163/simheittf.ttf",background_color="white",max_font_size=80,width=1000,height=600) #指定字体类型、字体大小和字体颜色
    word_frequence = {x[0]:x[1] for x in words_stat.head(1000).values}
    
    wordcloud=wordcloud.fit_words(word_frequence)
    plt.imshow(wordcloud)
    plt.axis('off')
    plt.show()

except urllib.error.URLError as e:
    if hasattr(e,"code"):
        print(e.code)
    if hasattr(e,"reason"):
        print(e.reason)
        time.sleep(10)
except Exception as e:
    print("exception:"+str(e))#若为Exception异常,延时10秒执行
    time.sleep(10)
    
            

下面是比较靠前的词频 ,稀饭是这个表情包的含义稀饭表情包,一刷就是一串。

     segment   计数
2118       好  442
1357      原著  387
6359      镇魂  341
5077      稀饭  322
1708      喜欢  319
4911      真的  292
1695     啊啊啊  287
4326      演技  276
2162      好看  246
2393      小说  239
3791     朱一龙  217
1147      剧情  206
1127       剧  190
4317      演员  184
4120       没  179
2914       想  172
1660     哈哈哈  152
4653     电视剧  144
5394      老师  136
4879      看过  133
335       不错  130
2515      希望  130
2107      女孩  128
3694      更新  125
675       会员  121
3468      教授  112
4941      眼神  111
3439      改编  109
4740      白宇   99

词云见下图,不过赵云澜三个字在图中分成赵云和澜,还有待完善。 

镇魂词图

评论第13页出现问题,待解决。

错误提示

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐