第一次个人编程作业

博客班级 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

  • 第一步
    将仓库复制到本地
  • 第二步
    将代码复制到文件夹中然后上传


posted @ 2021-02-26 11:56  会开车的代驾  阅读(63)  评论(0编辑  收藏  举报