社交网络服务网站,企业网络规划与设计,台州网站建设咨询,网站建设平台多少钱1.爬取猫眼电影热榜数据
此次爬取的是电影票房的热榜电影名称#xff0c;具体网站网址为猫眼电影热榜#xff0c;经过实验观察后发现#xff0c;此处的数据是通过ajax异步加载的#xff0c;如果不相信可以使用request对当前网站网址发送请求#xff0c;会发现无法获取电影…1.爬取猫眼电影热榜数据
此次爬取的是电影票房的热榜电影名称具体网站网址为猫眼电影热榜经过实验观察后发现此处的数据是通过ajax异步加载的如果不相信可以使用request对当前网站网址发送请求会发现无法获取电影热榜数据。 因此我们需要按下F12打开开发者工具选择网络然后可以根据网页上的电影名搜索找到对应的ajax异步请求根据异步请求找到对应数据所在的位置最后获取我们所需要的电影热榜名单写入python列表中即可。 找到热榜数据所在的位置后可以直接编写python代码将其存入列表中方便后序wordcloud库的使用具体代码如下所示
import requests
# 首先需要爬取热门电影
url https://piaofang.maoyan.com/dashboard-ajax?orderType0uuid18b09342ec12e-0604eb022bdfdc-26031e51-fa000-18b09342ec28dtimeStamp1696666732579User-AgentTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNy4wLjAuMCBTYWZhcmkvNTM3LjM2index97channelId40009sVersion2signKeyb65748f33df1de3fa1385172cf22dd86
# 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(urlurl, headersheaders)
# 设置响应编码
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(width800, height400, font_pathfont_path).generate(text)
# 绘制词云图像
plt.figure(figsize(10, 5))
plt.imshow(wordcloud, interpolationbilinear)
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_colorwhite’将背景颜色设置为白色。 最大词数max_words你可以限制词云中显示的最大词数。可以根据需要设置合适的值。例如max_words50将限制词云中显示的词数为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?orderType0uuid18b09342ec12e-0604eb022bdfdc-26031e51-fa000-18b09342ec28dtimeStamp1696666732579User-AgentTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNy4wLjAuMCBTYWZhcmkvNTM3LjM2index97channelId40009sVersion2signKeyb65748f33df1de3fa1385172cf22dd86
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(urlurl, headersheaders)
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(fnamefont_path)
# 创建词云对象并指定字体属性和样式调整
wordcloud WordCloud(width800,height400,font_pathfont_path,background_colorwhite, # 设置背景颜色为白色max_words60, # 限制词云中显示的最大词数为50个colormapviridis, # 使用颜色映射方案为viridismin_font_size10, # 设置词云中词语的最小字体大小max_font_size200 # 设置词云中词语的最大字体大小
).generate(text)# 绘制词云图像
plt.figure(figsize(10, 5))
plt.imshow(wordcloud, interpolationbilinear) #
plt.axis(off) #禁用坐标系
plt.show()运行后的结果如下所示