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

爬取小说章节,并制作成词云进行宣传

需求分析

前两天,一位朋友和我说,“你每次写的爬虫程序,最终的结果多半都是保存为了文本,这太不清晰了!”

我说,“也不是啊,就比如说爬取天气并制作可视化图,这一期中就使用了可视化的方式,能够直观的看到啊。“

他说,”但是,绘制图表的方式不是每次都有效果的,就比如说,如果我要给一个小说进行宣传的话,制作图表的效果就不要,应该学习使用词语。就比说,在qq的个人简介上,就有提供词云的功能。将很多代表这个人物的关键字都保存下来,制作成词云的图,就可以很好的展示这个人的特点了。你可不可以做一个这种的呢?“

当然没问题啊,那我们就研究一下如何制作吧!

实现分析

首先呢,我们需要确定,这次的工作应该分为两步,第一步呢,是爬取小说的章节,第二步呢,是将其制作为词云。那么第一步呢,之前我们已经制作过很多次了,应该不是什么问题。那么关键点就在于如何制作词云了

当然了,这个也不是什么问题,我们不需要真的自己去制作词云,我们只需要使用现成的词云库就可以了,有一个叫做wordcloud的第三方库,就可以很容易的制作词云图

from wordcloud import WordCloud

txt = "词A 词B 词C 词D"
WordCloud().generate(txt).to_file("ciyun.png")

那么还有一个问题,就是如何将词语从文章中分离出来了,这个也不是什么问题,我们只需要使用jieba库就好了

from jieba import lcut

words = lcut(txt)

 那么还有一个问题呢,就是我们切分出来的很多词,是否有用了,比如说,我啊,你啊,他啊,好的啊,这些词语没有什么很重要的含义,如果将它们都包括在内的话,恐怕制作出来的效果非常不理想,因此我们应该使用一个中文停用词表,然后将这些不需要的词语去除掉

获取到中文停用词表的方式很多,就比如说在github上,就有这样一个很好的中文停用词项目,这个也可以作为参考

那么到此为止呢,我们的所有准备工作就都已经就绪了,下面就是正式开始制作了

完整代码展示

import requests
from lxml import etree
from jieba import lcut
from wordcloud import WordCloud
from base64 import b64decode

headers = {"user-agent": "Mozilla/5.0"}

url = b64decode("aHR0cHM6Ly9yZWFkLnFpZGlhbi5jb20vY2hhcHRlci9QU1M0MnNjREMySzNEZFl6WFBDR3ZBMi9xWTBWMnRMcjNzNzZJdFRpX0lMUTdBMi8=").decode()

r = requests.get(url, headers=headers)

html = etree.HTML(r.text)

ctt = html.xpath("//div[@id='j_705235484']/p/text()")

ctt = "".join(ctt)

wds = lcut(ctt)

with open("中文停用词表.txt") as f:
    c = f.readlines()

nwds = list()

for word in wds:
    if word + "\n" in c:
        continue
    else:
        nwds.append(word)

txt = " ".join(nwds)
cy = WordCloud().generate(txt)
cy.to_file("ciyun.png")

那么截止到现在为止,制作的词云效果如何呢?效果如下所示

 这是什么东西呢?完全就看不懂啊!哦!原来是,我们的词云库不能够直接支持中文,还得额外为其添加中文字体,才能够正常显示啊,这个原本在我们的计划之外了,不过没关系啊,只需要简单的配置一下,很快就可以使用了,效果如下

 这个看起来好像,像是一个词云了,但是为什么这么丑呢?我们在qq上看到的词云都很好看,比如说“天然呆”,“自然萌”,“我这么可爱我不能死”,为什么我们制作的图片这么丑呢?我想,一定是因为黑色的背景太难看了,我们需要通过ps处理一下,把背景替换为白色的,也许就会好了,效果如下

 额,现实和理想总是有所差距的,这个似乎还不如刚刚的好看了呢。一定是我们的ps水平太差,没办法很好的处理好这个图片,对一定是这样。而且,现在观察起来的话,最大的问题可能是在同一张图片上,我们包含的词语数量太多了,所以说主次不分明,密密麻麻的挤在一起,所以说,才非常不好看的。下次如果要改进的话,应该尝试减少关键词的数量,让一张图中不要出现这么多关键词,也许就会有所提升

总而言之,词云的功能已经实现了,感觉还算不错?


朋友看完了我的词云图以后非(极)常(其)高(失)兴(望),他说,“仙草哥哥,你做得很好,下次不要做了。”

相关文章:

  • [架构之路-18]:目标系统 - 硬件平台 - 案例1 - 单片机MCU STM32 芯片的工作原理与启动流程
  • C++内存管理以及模板的引入
  • ROS问题:gazebo没有想要的模型,而且不报错
  • 【SpringBoot+MyBatisPlus】点餐系统之登录功能、退出功能设计
  • 操作符(operator)
  • 数据同步工具—Sqoop
  • 文件上传之中间件解析漏洞详解
  • 【每日一好题】这么经典的题你不能不会:矩阵置零
  • JSR223常用函数和对象--Jmeter内置对象Chapter1
  • 从头开始训练神经网络(Unet)
  • Python制作自动填写脚本,100%准确率
  • 半小时了解SQL注入漏洞?(注入方式大全+绕过大全)
  • CSS 几种常见的选择器
  • 【Day17】Java算法刷题 【面试题 01.08. 零矩阵】 【844. 比较含退格的字符串】
  • 【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备
  • 2017前端实习生面试总结
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • es6要点
  • Java 内存分配及垃圾回收机制初探
  • js操作时间(持续更新)
  • Laravel Telescope:优雅的应用调试工具
  • Python打包系统简单入门
  • spring cloud gateway 源码解析(4)跨域问题处理
  • V4L2视频输入框架概述
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 面试遇到的一些题
  • 扑朔迷离的属性和特性【彻底弄清】
  • 问题之ssh中Host key verification failed的解决
  • 小程序开发之路(一)
  • 在Unity中实现一个简单的消息管理器
  • 交换综合实验一
  • ###STL(标准模板库)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)Linux——Linux常用指令
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (排序详解之 堆排序)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)Linux+Windows下安装ffmpeg
  • .cfg\.dat\.mak(持续补充)
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net6Api后台+uniapp导出Excel
  • .NetCore 如何动态路由
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [docker] Docker容器服务更新与发现之consul
  • [FZSZOJ 1223] 上海红茶馆
  • [LeetCode]: 145: Binary Tree Postorder Traversal
  • [leetcode]114. Flatten Binary Tree to Linked List由二叉树构建链表