翼度科技»论坛 编程开发 python 查看内容

使用Python获取春节档电影影评,制作可视化词云图

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
春节电影听巳月说都还可以,我不信,我觉得还是要看看看过的观众怎么说,于是我点开了流浪地球2 …

看起来好像不错的样子,8.2的评分,三十多亿的票房
就是这评价也太多了,那我们今天就把网友对它的评论获取下来,做成可视化词云图看看大家讨论最多的是什么。
准备工作

使用的环境
  1. Python 3.8 解释器
  2. Pycharm 编辑器
复制代码
 
需要手动安装的模块
  1. parsel  数据解析模块
  2. requests    数据请求模块
复制代码
 
在cmd直接pip安装即可
 采集数据部分

基本思路流程

一、数据来源分析
1、明确需求()

  • 采集的网站是什么?
  • 采集的数据是什么?
2、抓包分析相关数据来源
通过浏览器自带开发者工具进行抓包分析

  • 打开开发者工具: F12 或者 鼠标右键点击检查选择network
  • 刷新网页: 让本网页的数据内容重新加载一遍
  • 关键字搜索: 通过关键字, 搜索查询相对应的数据包
二. 代码实现步骤
基本四大步骤

  • 发送请求:模拟浏览器对于url地址发送请求
  • 获取数据:获取服务器返回响应数据
    开发者工具 --> response
  • 解析数据:提取我们想要的数据内容
    评论相关数据
  • 保存数据:把数据内容保存表格文件里面
代码实战

发送请求,模拟浏览器对于url地址发送请求
  1. for page in range(0, 200, 20):
  2.     # 请求链接
  3.     url = f'https://movie.douban.com/subject/35267208/comments?start={page}&limit=20&status=P&sort=new_score'
  4.     # 伪装模拟
  5.     headers = {
  6.         # User-Agent 用户代理, 表示浏览器基本身份标识
  7.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
  8.     }
  9.     # 发送请求
  10.     response = requests.get(url=url, headers=headers)
  11.     print(response)
复制代码
 
获取数据, 获取服务器返回响应数据。
  1. print(response.text)
复制代码
 
解析数据,提取我们想要的数据内容。
把获取下来html字符串数据 , 转成可解析对象
  1. selector = parsel.Selector(response.text)  
  2. # 第一次提取, 所有div标签
  3. divs = selector.css('div.comment-item')
  4. # for循环遍历, 把列表里面元素一个一个提取出来
  5. for div in divs:
  6.     name = div.css('.comment-info a::text').get()  # 昵称
  7.     rating = div.css('.rating::attr(title)').get()  # 推荐
  8.     date = div.css('.comment-time::attr(title)').get()  # 时间
  9.     area = div.css('.comment-location::text').get()  # 地区
  10.     votes = div.css('.votes::text').get()  # 有用
  11.     short = div.css('.short::text').get().replace('\n', '')  # 评论
  12.     # 数据存字典里面
  13.     dit = {
  14.         '昵称': name,
  15.         '推荐': rating,
  16.         '时间': date,
  17.         '地区': area,
  18.         '有用': votes,
  19.         '评论': short,
  20.     }
复制代码
 
写入数据
  1. csv_writer.writerow(dit)
  2. print(name, rating, date, area, votes, short)
  3. # 代码仅做参考,完整代码、详细视频讲解在这个q裙 708525271 自取即可
复制代码
 
创建文件对象
  1. f = open('data10.csv', mode='a', encoding='utf-8-sig', newline='')
  2. csv_writer = csv.DictWriter(f, fieldnames=[
  3.     '昵称',
  4.     '推荐',
  5.     '时间',
  6.     '地区',
  7.     '有用',
  8.     '评论',
  9. ])
复制代码
 
写入表头
  1. csv_writer.writeheader()
复制代码
可视化词云图

代码展示
  1. import pandas as pd
  2. import jieba
  3. import wordcloud
  4. df = pd.read_csv('data10.csv')
  5. df.head()
  6. info_list = df['评论'].to_list()
  7. string = ' '.join(jieba.lcut(''.join(info_list)))
  8. string
  9. wc = wordcloud.WordCloud(
  10.     width=1000,
  11.     height=700,
  12.     background_color='white',
  13.     font_path='msyh.ttc',
  14.     scale=15,
  15. )
  16. wc.generate(string)
  17. wc.to_file('1.png')
  18. evaluate_num = df['推荐'].value_counts().to_list()
  19. evaluate_type = df['推荐'].value_counts().index.to_list()
复制代码
 
  1. import pyecharts.options as opts
  2. from pyecharts.charts import Pie
  3. data_pair = [list(z) for z in zip(evaluate_type, evaluate_num)]
  4. data_pair.sort(key=lambda x: x[1])
  5. c = (
  6.     Pie(init_opts=opts.InitOpts(bg_color="#2c343c"))
  7.     .add(
  8.         series_name="豆瓣影评",
  9.         data_pair=data_pair,
  10.         rosetype="radius",
  11.         radius="55%",
  12.         center=["50%", "50%"],
  13.         label_opts=opts.LabelOpts(is_show=False, position="center"),
  14.     )
  15.     .set_global_opts(
  16.         title_opts=opts.TitleOpts(
  17.             title="推荐分布",
  18.             pos_left="center",
  19.             pos_top="20",
  20.             title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
  21.         ),
  22.         legend_opts=opts.LegendOpts(is_show=False),
  23.     )
  24.     .set_series_opts(
  25.         tooltip_opts=opts.TooltipOpts(
  26.             trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
  27.         ),
  28.         label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),
  29.     )
  30. )
  31. c.render_notebook()<br>
复制代码
  1. <strong>效果展示</strong>
复制代码

好了今天的分享就到这,大家快去试试吧,下次见!

来源:https://www.cnblogs.com/hahaa/p/17103013.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具