当前位置: 首页 > news >正文

一文生成猫眼电影热榜词云

1.爬取猫眼电影热榜数据

此次爬取的是电影票房的热榜电影名称,具体网站网址为猫眼电影热榜,经过实验观察后发现,此处的数据是通过ajax异步加载的,如果不相信可以使用request对当前网站网址发送请求,会发现无法获取电影热榜数据。
在这里插入图片描述
因此,我们需要按下F12打开开发者工具,选择网络,然后可以根据网页上的电影名搜索找到对应的ajax异步请求,根据异步请求找到对应数据所在的位置,最后获取我们所需要的电影热榜名单,写入python列表中即可。
在这里插入图片描述
找到热榜数据所在的位置后,可以直接编写python代码将其存入列表中,方便后序wordcloud库的使用,具体代码如下所示:

import requests
# 首先需要爬取热门电影
url = 'https://piaofang.maoyan.com/dashboard-ajax?orderType=0&uuid=18b09342ec12e-0604eb022bdfdc-26031e51-fa000-18b09342ec28d&timeStamp=1696666732579&User-Agent=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNy4wLjAuMCBTYWZhcmkvNTM3LjM2&index=97&channelId=40009&sVersion=2&signKey=b65748f33df1de3fa1385172cf22dd86'
# UA伪装
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
# 设置响应编码
response.encoding = 'utf-8'
# 访问url后返回的是json数据
movieList = response.json()['movieList']['data']['list']
words = []# 定义词云列表 将爬取到的热榜电影写入列表中
for movie in movieList:words.append(movie['movieInfo']['movieName'])
print(words)

2.生成词云

要根据Python列表中的词语生成词云,你可以使用wordcloud库。wordcloud库提供了创建和自定义词云图像的功能。
当然,要使用肯定首先需要安装wordcloud和matplotlib模块,wordcloud用于创建词云对象,而matplotlib用于绘制图像展示。

pip install wordcloud
pip install matplotlib

安装上述模块完成后,我们可以简单编写一个生成词云的代码体验一下,具体实例代码如下所示:

from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 词语列表
words = ["apple", "banana", "orange", "apple", "grape", "banana", "apple"]
# 将词语列表转换为以空格分隔的字符串
text = " ".join(words)
# 创建词云对象,并指定TrueType字体文件路径
font_path = "path/to/your/font.ttf"  # 指定TrueType字体文件路径 替换为自己的ttf文件
wordcloud = WordCloud(width=800, height=400, font_path=font_path).generate(text)
# 绘制词云图像
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

上述代码唯一需要注意的便是,你需要下载TrueType字体文件路径,普通的字体文件可能无法正常显示,这里推荐大家根据自己的需求去Google Fonts和DaFont下载符合自己需求的TrueType字体文件,同时,TrueType字体文件都是ttf后缀结尾的。
在这里插入图片描述

3.解决可能出现的问题

如果你发现你下载TrueType字体文件没有任何报错,那么就可以跳过本节,直接看最后一部分,如果出现问题,看看是不是和我遇到的一样。我在上述网页下载字体文件并正确引用后,还出现wordcloud词云报错ValueError: Only supported for TrueType fonts,如果真的是这种情况,不需要犹豫,那就是你的模块版本需要更新了,在终端运行下面的命令,更新对应的模块即可解决问题。

pip install --upgrade pip
pip install --upgrade wordcloud
pip install --upgrade pillow

具体可以参考博客参考博客1和参考博客2,我解决问题就是按照里面博客的内容来的。

4.最终代码以及结果展示

如果直接将上述1-2部分的代码根据要求合并,可能生出的词云有点丑,因此我们可以简单调整。
当生成词云图像时,你可以通过调整一些参数来改善样式,使其更好看。以下是一些可以尝试的样式调整:
背景颜色(background_color):你可以指定词云的背景颜色,例如将其设置为白色或其他适合的颜色。可以使用RGB值或预定义的颜色名称。例如,background_color='white’将背景颜色设置为白色。
最大词数(max_words):你可以限制词云中显示的最大词数。可以根据需要设置合适的值。例如,max_words=50将限制词云中显示的词数为50个。
颜色映射(colormap):你可以选择不同的颜色映射方案来为词云中的词语选择颜色。可以使用预定义的颜色映射名称,例如colormap=‘viridis’。你也可以使用自定义的颜色映射。
字体大小范围(min_font_size和max_font_size):你可以指定词云中词语的字体大小范围。你可以根据需要设置最小和最大字体大小值。
完整的代码如下所示:

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import requests
# 首先需要爬取热门电影
url = 'https://piaofang.maoyan.com/dashboard-ajax?orderType=0&uuid=18b09342ec12e-0604eb022bdfdc-26031e51-fa000-18b09342ec28d&timeStamp=1696666732579&User-Agent=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNy4wLjAuMCBTYWZhcmkvNTM3LjM2&index=97&channelId=40009&sVersion=2&signKey=b65748f33df1de3fa1385172cf22dd86'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
# 访问url后返回的是json数据
movieList = response.json()['movieList']['data']['list']
words = []# 定义词云列表 将爬取到的热榜电影写入列表中
for movie in movieList:words.append(movie['movieInfo']['movieName'])
print(words)# 将词语列表转换为以空格分隔的字符串
text = " ".join(words)# 创建词云对象,并指定TrueType字体文件路径
font_path = "./字体文件/Noto_Sans_SC/NotoSansSC-VariableFont_wght.ttf"  # 指定TrueType字体文件路径
# 加载字体文件
font_prop = FontProperties(fname=font_path)
# 创建词云对象,并指定字体属性和样式调整
wordcloud = WordCloud(width=800,height=400,font_path=font_path,background_color='white',  # 设置背景颜色为白色max_words=60,  # 限制词云中显示的最大词数为50个colormap='viridis',  # 使用颜色映射方案为viridismin_font_size=10,  # 设置词云中词语的最小字体大小max_font_size=200  # 设置词云中词语的最大字体大小
).generate(text)# 绘制词云图像
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation="bilinear") #
plt.axis("off") #禁用坐标系
plt.show()

运行后的结果如下所示:
在这里插入图片描述

http://www.lryc.cn/news/184390.html

相关文章:

  • 监控脚本展示
  • 【重拾C语言】五、模块化程序设计——函数(定义、调用、参数传递、结果返回、函数原型;典例:打印字符图形、验证哥德巴赫猜想)
  • Unity实现设计模式——迭代器模式
  • 【数据结构与算法】之“堆”介绍
  • ncnn Fatal signal 11 (SIGSEGV) 使用GPU加速崩溃
  • 计算机考研 | 2018年 | 计算机组成原理真题
  • 用Configuration注解的方式写一个java过滤器的详细实例?
  • 基于Springboot实现旧物置换网站平台演示【项目源码+论文说明】分享
  • 想要精通算法和SQL的成长之路 - 存在重复元素
  • 使用华为eNSP组网试验⑸-访问控制
  • iPhone苹果手机闹钟智能跳过节假日怎么设置?
  • TenDB Cluster 简介
  • 【刷题笔记10.6】LeetCode:翻转二叉树
  • 【高阶数据结构】图详解第一篇:图的基本概念及其存储结构(邻接矩阵和邻接表)
  • IPV4跟IPV6的区别
  • 利用fitnesse实现api接口自动化测试
  • 【LeetCode】1154.一年中的第几天
  • 4.物联网射频识别,RFID开发【智能门禁项目】
  • CompletableFuture 和 Future 的选择,以及CompletableFuture的用法
  • 美国第三大财产和意外险公司利宝保险集团利用 OpenText EnCase 取证收集技术控制法律风险和成本
  • 打包报错JavaScript heap out of memory
  • Android Camera FW 里的requestId和frameId
  • 代理IP与Socks5代理在技术世界的多元应用
  • 计算机专业毕业设计项目推荐12-志愿者管理系统(Spring+Js+Mysql)
  • 苹果文件传到mac电脑用什么软件?
  • 深入理解Docker:简化部署与管理的利器
  • 软考对找工作有用吗?
  • Android系统启动之init进程启动+Zygote进程启动分析
  • 微信这样的加人方式,既安全又解放双手
  • CVE-2023-5129:libwebp开源库10分漏洞