戴海斌---第一次个人编程作业
博客班级 | 2018级计算机和综合实验班 |
---|---|
作业要求 | 第一次个人编程作业 |
作业目标 | <py爬取评论及分词,echarts渲染词云图,上传github> |
作业源代码 | first-personal-work |
学号 | <211806110> |
学习记录
| 项目 | 总计 |
| :---: |:-----: | :---: |
| 查找资料 | 5h |
| 编码时间 | 7.5h |
| 代码行数 | 211行 |
步骤 | 难点 | 时间 |
---|---|---|
1.解析网址 | Ajax异步 | 1h |
2.爬虫代码 | 正则表达式 | 1.5h |
3.保存评论文件 | 10min | |
4.评论分词 | jieba库 | 2h |
5.保存分词文件 | 格式修改 | 30min |
6.生成词云图 | echarts.js | 4h |
7.上传到Github | commit规范 | 1.5h |
8.写博客 | 1h |
第一步:爬取腾讯视频在一起评论
(1)因为开始时展示的只有部分评论,需要点击最下方的查看更多评论
才有新的评论被刷新出来。评论使用了Ajax异步刷新技术,一般Ajax都是在Network的JS里面,刷新页面后按F12,多次点击查看更多评论,发现每点击一次会多出一个以v2?
为开头的标签
(2)查看几个JS的URL地址从中得出规律,发现URL中只有cursor和source属性值会改变,最后一个值source为递增+1的数字,而后一页评论的cursor值在前一页评论中data的last属性值
(3)编写爬取评论的函数,使用正则表达式,一页有10条评论,爬取时一共有12689条评论,循环1269次即可得到所有评论,而评论的内容在content属性值里
def getinfo():
global cursor,source
for i in range(0,1269):
url = 'https://coral.qq.com/article/5963120294/comment/v2?callback=_article5963120294commentv2&orinum=10&oriorder=o&pageflag=1&cursor=' + cursor + '&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_=' + source
data = requests.get(url, headers=headers).content.decode()
cursor = re.findall('"last":"(.*?)"',data,re.S)[0] #准备下一页URL的cursor值
source = str(int(source)+1) #准备下一页URL的source值
comment = re.findall('"content":"(.*?),"',data,re.S) #爬取当前页的评论
comments.append(comment) #将所有的评论拼接
return comments
(4)编写json文件的函数,上学期学的爬虫大部分是csv文件,将后缀改成json替换一下得到
def writejson(comments):
with open('comments.json','a',encoding = 'UTF-8') as jsonfile:
for info in comments:
for data in info:
jsonfile.write(data) #写文件
jsonfile.write('\n') #每条评论中间换行
(5)编写主函数,在JupyterNotebook中运行,按F12后刷新页面得到的v2?
标签即为第一页评论的URL地址,发现第一页评论cursor值为0,source = '1&_=1614062141061'
第二步:对评论进行分词
(1)参照jieba库的使用进行学习,lcut()方法是使用精确模式对文本进行分词
(2)发现直接这行分词有两个缺点,许多单个汉字的出现没有实际意义,还有一些停用词,例助词、语气词等参杂在其中,在csdn下载了常见停用词的txt文本
(3)在进行最后的echarts.js渲染生成词云图时data是一个数组,每个数组项必须具有name和value属性,将保存文件的格式再次修改
第三步:生成词云图
(1)在阿里巴巴矢量图标库官网上面找一张矢量图,下载时最好选择黑色填充
我选择了一张南瓜图案的照片
(2)将矢量图放在base64图片在线转换工具上进行格式转换,放入html代码里
(3)使用浏览器打开html页面,原本的图片是一个南瓜,怎么制作后像苹果
第四步:上传代码
(1)git init
Git仓库初始化,生成.git文件让Git知道,它需要来管理这个目录;接着创建两个分支chart和crawl
分支操作常用命令
查看历史版本号 git log --pretty=oneline / git reflog
回退操作 git reset--hard 编号
查看分支 git branch
创建分支 git branch 分支名
切换分支 git checkout 分支名
删除分支 git branch -d 分支名
(2)添加文件到暂存区->提交commit->推送到 GitHub
(3)合并到main主分支
(4)push 是可能会遇到报错:failed to push some refs to "...git"
因为合并时里面的内容有冲突,需要将冲突文件打开,对里面的内容进行调整,保留需要的,不需要的删除即可,重新提交
心得体会
- 练习少,对学过的python语法有部分遗忘,在实现一些具体功能时需去CSDN查阅,平时要多写代码了
- 马虎,没有仔细阅读所有的作业要求,已经上传Github后才注意到Commit规范,导致需要删库重来
- 完成作业以后还美化了一下博客园,有点有趣
- 通过这次作业学习到了很多新的知识,每次解决了一个问题以后心情很好,这种感觉不错