全网文章采集软件(爬取《鱿鱼游戏》豆瓣上的技术栈和工具)
优采云 发布时间: 2021-10-12 12:28全网文章采集软件(爬取《鱿鱼游戏》豆瓣上的技术栈和工具)
各位读者好,我是小张~
今天不是国庆节,所以回顾了一部最近很火的韩剧《鱿鱼游戏》。这部剧的整体剧情还是很不错的,值得一看。
作为技术博主,当然不能在这里介绍这部剧的影评。毕竟我这方面不专业,最重要的是写不出来。
本文主要是爬取豆瓣上《鱿鱼游戏》的一些影评,对数据做一些简单的分析,从数据的角度重新审视这部剧。
技术工具
在正文开始之前,先介绍一下本文中用到的技术栈和工具文章。本文所涉及的所有源码数据可通过公众号【小张Python】后台回复关键词211003获取。
本文用到的技术栈和工具如下,可以概括为四个方面:
数据采集
这次数据采集的目标网站是豆瓣,但是我的账号之前被封了,所以只能采集获取200条左右的数据。豆瓣有相应的反爬虫机制。查看超过10页的评论需要用户登录才能进行下一步
至于账号为什么被封,是因为我在学习爬虫的时候不知道在哪里制作【豆瓣模拟登录】代码。当时不知道代码有没有问题。试用后被封,永久封号
图1
这里也给大家提个醒。以后做爬虫的时候,在模拟登录的时候尽量使用一些测试账号,如果不需要自己的账号就不要使用。
这次的数据采集也比较简单,就是改变图2中url上的start参数,使用offset为20的规则作为下一页url的拼接;
图2
获取到请求连接后,使用requests的get请求,然后分析获取到的html数据,就可以得到我们需要的数据;采集 核心代码贴在下面
for offset in range(0,220,20):
url = "https://movie.douban.com/subject/34812928/comments?start={}&limit=20&status=P&sort=new_score".format(offset)
res = requests.get(url,headers= headers)
# print(res.text)
soup = BeautifulSoup(res.text,'lxml')
time.sleep(2)
for comment_item in soup.select("#comments > .comment-item"):
try:
data_item = []
avatar = comment_item.select(".avatar a img")[0].get("src")
name = comment_item.select(".comment h3 .comment-info a")[0]
rate = comment_item.select(".comment h3 .comment-info span:nth-child(3)")[0]
date = comment_item.select(".comment h3 .comment-info span:nth-child(4)")[0]
comment = comment_item.select(".comment .comment-content span")[0]
# comment_item.get("div img").ge
data_item.append(avatar)
data_item.append(str(name.string).strip("\t"))
data_item.append(str(rate.get("class")[0]).strip("allstar").strip('\t').strip("\n"))
data_item.append(str(date.string).replace('\n','').strip('\t'))
data_item.append(str(comment.string).strip("\t").strip("\n"))
data_json ={
'avatar':avatar,
'name': str(name.string).strip("\t"),
'rate': str(rate.get("class")[0]).strip("allstar").strip('\t').strip("\n"),
'date' : str(date.string).replace('\n','').replace('\t','').strip(' '),
'comment': str(comment.string).strip("\t").strip("\n")
}
if not (collection.find_one({'avatar':avatar})):
print("data _json is {}".format(data_json))
collection.insert_one(data_json)
f.write('\t'.join(data_item))
f.write("\n")
except Exception as e:
print(e)
continue
抓取豆瓣的时候需要记得添加cookie和User-Agent,否则不会有数据为空。
为了方便后面数据的可视化和提取,本文使用Mongodb作为数据存储。有211条数据。采集的主要数据字段为头像、姓名、评分、日期、评论,分别代表用户头像、用户名、明星。成绩、日期、评论;结果如图3所示;
图 3
关于Python如何使用MongoDB,可以参考旧新闻[]
数据可视化
可视化部分之前计划用Python+Pyecharts来实现,但是Python图表中的交互效果不是很好。只需使用原生的 Echarts + Vue 组合即可实现。而且,在这种情况下,将所有图表放在一个网页上更方便。
首先是对评论时间和评论数量进行图表预览。根据数据,评论时间分布为散点图。看用户评论的主要时间分布。
图 4
图4中圆点的大小和颜色代表了当天的评论数,评论数也可以反映当天剧的热度。
据了解,《鱿鱼游戏》的影评从9月17日开始上涨,20日见顶,21日回落;评论数量在21日和29日之间来回波动,差别不大;
至少要到国庆节,10月1日,猜测可能一方面是国庆假期大家都出去玩了,另一方面,随着时间的推移,这部剧的热度也有所下降。
为了了解大家对《鱿鱼游戏》的评价,我根据这200条节目的【评分星级】数据绘制了饼图,最终效果如图5所示。
图 5
老实说,图 5 的结果让我有点吃惊。至少对我来说,这部剧的质量是相当高的。画之前我觉得应该是【五颗星】的比例最大,其次是【四颗星】,然后是【三星】;
现在【三星】和【五星】的比例正好相反。可能是这部剧的剧情残酷,会引起不适,所以高分占的比例不高;
为了方便,我最后把上面两个图表放在一个网页上,效果如图6和图7两种不同的布局
垂直布局
图 6
横向布局
图 7 词云可视化
这次采集的数据信息有限,可以分析的数据维度并不多。对数据图表的分析到此基本结束。以下是采集收到的评论的几张词云图
图 8
从图8中可以看出,人性不是现实中常用的口头语,而是影评中出现频率最高的词,而这个词确实契合了电视剧《鱿鱼游戏》的主题,从第一集开始到结尾他们都在分析人性,赌徒的“贪婪和赌瘾”,贵宾的“弱肉强食”
图9
与之前的词云图相比,图9突出了相对更多的信息。比如韩国,人物、刺激、剧情、*敏*感*词*启示、题材等都和剧情有关。除了这几条信息,李政宰、孔刘、李秉宪等几位主演也都被提到了
最后,我用采集到达的用户头像制作了两个图片墙作为文章的结尾
图10
图11
图10、图11 照片墙的轮廓使用了剧中两个角色的截图,一个是123木人,一个是男一玩游戏二的截图:
关于照片墙的*敏*感*词*法请参考旧闻:
概括
本文涉及的所有源码和信息获取方式:关注微信公众号:【小张Python】,后台回复关键词211003,即可获取,
好了,这就是本文文章的全部内容。这篇文章分析的东西不多。主要介绍Python在数据采集和可视化方面的一些应用。
如果内容对你有帮助,希望给文章点个赞鼓励一下。当然,也欢迎读者朋友们把文章分享给更多的人!
最后,感谢大家的阅读,下期再见~