文章目录
原文请关注:实用自然语言处理
作者:风兮
建议查看原文: https://mp.weixin.qq.com/s/nURcYKN6vRBKjbMXAUbEng
关键词: 爬虫、文本数据预处理、数据分析、可视化、自然语言处理、pyecharts
摘要: 本文主要内容,获取解析豆瓣《狂飙》的短评相关数据和演职员信息,在数据预处理后,进行简单的数据分析和可视化展示。
本文全部代码路径
https://github.com/fengxi177/pnlp2023/tree/main/chapter_1
1、背景
前文《文本数据预处理:可能需要关注这些点》分享了关于文本预处理的理论知识,本文将分享一份示例demo。正好,碰到了热议的电视剧《狂飙》。因此,本文打算从自然语言处理、数据分析和可视化的角度来凑个热闹(原本计划在大结局当天发出来文章,可惜,大结局有一段时间了。拖延了,哈哈哈)。
2、数据获取
既然要做电视剧《狂飙》相关的nlp数据分析,那么就先选定数据目标站。经过一圈搜寻对比,发现还是豆瓣中的评论更为客观,参与群体数量多,见解更丰富专业,哈哈哈。因此,本文将获取https://movie.douban.com/subject/35465232/ 页面中的相关数据。
截止2023年2月28日,豆瓣中电视剧《狂飙》的短评已经22w+(2023年2月6日13w+,评论热度依然很高)。通过翻看短评数据,可以发现不登录状态最多可以获取220条数据,登录后最多可以获取600条数据。一般,可以通过cookie和selenium的方式实现登录,网上有参考教程,自行搜集。
不过,在不登录状态下,通过URL参数设置分析,发现各参数下都可以获得220条数据。因此,本文只获取不登录状态下的数据。具体的,通过好评、中评和差评参数percent_type设置分别获取220条短评及其相关数据。(特别的,仔细观察URL的参数设置还可以获得更多的数据哦。)
def parse_comments(url):
"""
解析HTML页面,获得评论及相关数据
:param url:
:return:
"""
html = get_html(url)
soup_comment = BeautifulSoup(html, 'html.parser')
# 所有获取的一页数据
data_page = []
# 提取评论
comments_all = soup_comment.findAll("div", "comment-item")
for comments in comments_all:
try:
# 解析评论及相关数据
comment_info = comments.find("span", "comment-info") # 评论id相关信息
comment_vote = comments.find("span", "comment-vote") # 评论点赞信息
comment_content = comments.find("span", "short").text.replace("\n", "") # 评论内容
# 提取需要的各字段信息
info_list = comment_info.findAll("span")
star_rating = info_list[1]
user_name = comment_info.find("a").text
video_status = info_list[0].text # 电视剧观看状态
comment_score = int(star_rating["class"]