第一次个人编程作业
博客班级 | https://edu.cnblogs.com/campus/fzzcxy/2018CS |
---|---|
作业要求 | https://edu.cnblogs.com/campus/fzzcxy/2018CS/homework/11732 |
作业目标 | <采集腾讯视频里电视剧《在一起》的全部评论信息,利用分词器处理数据,生成词云图,在博客园上发表随笔,将代码上传至GitHub中> |
作业源代码 | https://github.com/xiaohei1127/first-personal-work |
学号 | <211805269> |
代码行数 | <74> |
---|---|
分析时间 | <60min> |
编程时间 | <120min~180min> |
流程
1.准备
先看题目了解作业的目的,并构思如何做。
2.分析
打开腾讯视频《在一起》,并分析数据。
可以看到评论的内容都在content中
然后多点几次查看更多评论,可以发现使用的是异步加载,将js请求的url复制几个到记事本上发现只有cursor和source=132&_=后面的是不一样的。
于是再打开源码可以发现source=132&_=后面的是由上一页的源码中的last后面的数值决定的,而cursor就是通过简单的加法实现变化的。
3.代码实现
- 第一步:
爬取数据
import re
import requests
import json
comments = []
comment = []
x = 1614254331760
cursor = '0'
flag = 0
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'}
for i in range(0,2000):
url = 'https://video.coral.qq.com/varticle/5963120294/comment/v2?callback=_varticle5963120294commentv2&orinum=10&oriorder=o&pageflag=1&cursor=' + cursor + '&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=' + str(x)
source = requests.get(url, headers=headers).content.decode()
comment = re.findall('content":"(.*?),"', source, re.S)
comments.append(comment)
cursor = re.findall('"last":"(.*?)"', source, re.S)[0].replace("\n","").replace(" ","")
if (flag == 0):
x = x + 3
else :
x = x + 1
flag = flag + 1
a = open("comments.json", "w", encoding='utf-8')
for elements in comments:
for element in elements:
a.write(element)
a.write('\n')
a.close()
print(comments)
- 第二步:
进行分词
import jieba
words = open("comments.json",encoding='utf-8').read()
wordslist = jieba.cut(words)
wordcount = {}
for word in wordslist:
if len(word) == 1:
continue
else:
wordcount[word] = wordcount.get(word, 0) + 1
value = list(wordcount.items())
value.sort(key=lambda x:x[1], reverse=True)
f = open("split.json","w",encoding='utf-8')
f.write(str(value))
f.close()
- 第三步:
生成词云图
import jieba
from pyecharts.charts import WordCloud
comments = open("comments.json", "r", encoding='utf-8').read()
# 使用精确模式对文本进行分词
words = jieba.lcut(comments)
# 通过键值对的形式存储词语及其出现的次数
counts = {}
for word in words:
# 单个词语不计算在内
if len(word) == 1:
continue
else:
# 遍历所有词语,每出现一次其对应的值加 1
counts[word] = counts.get(word, 0) + 1
# 将键值对转换成列表
items = list(counts.items())
# 根据词语出现的次数进行从大到小排序
items.sort(key=lambda x: x[1], reverse=True)
word_cloud = WordCloud()
word_cloud.add("评论数:", items, word_size_range=[12, 55])
word_cloud.render('index.html')
4.上传至GitHub
- 第一步
将仓库复制到本地
- 第二步
将代码复制到文件夹中然后上传