镇魂优酷视频短评爬虫
#!/usr/bin/python# -*- coding: UTF-8 -*-import urllib.requestimport urllib.errorimport refrom lxml import etreeimport timeimport pandas as pdimport sysimport jiebaimport numpy#numpy计...
·
#!/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¤tPage="+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页出现问题,待解决。
更多推荐
已为社区贡献3条内容
所有评论(0)