python__wordcloud生成词云

1、完成目标:

爬取书评或者影评然后获取其评论词,并制作词云,如图所示
  在这里插入图片描述2、内容预告

本文设计到知识点较多,在代码中会有注释,这里简单罗列一下
(1)python对字符串的处理(删除自己不想要的东西)——re库的使用
(2)python对文件的读写操作
(3)python对各类型数据包括字符串、列表、字典等的转换等处理
(4)爬虫相关内容
(5)jieba(结巴,哈哈哈)实用分词库的使用
(6)wordcloud 词云生成库的使用

一、准备

1、python环境

2、涉及到的python库需要 pip install 包名 安装

pip install jieba
pip install wordcloud

import requests
import re
import jieba
from wordcloud import WordCloud
import numpy
from PIL import Image


# 删除文本中的非中文部分
def find_chinese(file):
    pattern = re.compile(r'[^\u4e00-\u9fa5]')
    chinese = re.sub(pattern, '', file)
    return chinese


# 爬取小王子的短评内容
def spider_xiaowangzi():
    commentres = ''
    with open('D:\\text\CSDN\\wordcloud.txt', 'w', encoding='utf-8') as f:
        url = 'https://book.douban.com/subject/1084336/comments/?percent_type=h&limit=20&status=P&sort=new_score'  # 爬取目标地址
        header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
            'Cookie': 'll="118100"; bid=gr9hyjlFAIs; __utmz=30149280.1586961843.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _vwo_uuid_v2=DAACAB21E936827CFA01C7ADE5CAF4293|cc739421584c029e0df955dae135ef07; __gads=ID=2846de2c51666e22:T=1587043991:S=ALNI_MaF-A9RTL8744UwEClUMK5nqOC8nw; _ga=GA1.2.507836951.1586961843; gr_user_id=3aa1d1e6-1a34-4b05-82ef-8066755b0ca9; __utmz=81379588.1587383782.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __yadk_uid=Ot4d328rVsOjtT0KtAdZE0rJH9jhIhlq; viewed="1007305"; ap_v=0,6.0; __utmc=30149280; __utma=30149280.507836951.1586961843.1588474302.1588476961.13; __utmt_douban=1; __utmb=30149280.1.10.1588476961; __utma=81379588.507836951.1586961843.1587445404.1588476961.5; __utmc=81379588; __utmt=1; __utmb=81379588.1.10.1588476961; _pk_id.100001.3ac3=bc45a2b0c4ddf6ec.1587383783.5.1588476961.1587445427.; _pk_ses.100001.3ac3=*'
        }  # 带上请求头爬取才不至于被拦
        try:
            data = requests.get(url, headers=header).text
        except:
            print('爬取失败')
            exit()
        # 从爬取的data中解析出该部分内容(结果是一个列表)
        comment = re.findall('<span class="short">(.*?)</span>',
                             data)  # <span class="short">十几岁的时候渴慕着小王子,一天之间可以看四十四次日落。是在多久之后才明白,看四十四次日落的小王子,他有多么难过。</span>

        for i in range(0, len(comment)):
            commentres = commentres + comment[i]  # 将列表转换为一个完整的字符串
        commentres = find_chinese(commentres)  # 去除其中的非中文部分
        commentres = re.sub('[我你他的了但是就还要不会那在有都才看也又太像可中却很说到对]', '', commentres)  # 去除文本中我你他之类的你不想要的高频词

        f.write("{duanpin}\n".format(duanpin=commentres))  # 将结果写入.txt文件中
        # print (commentres)
        return commentres


def create_wordcloud(content, savename):
    mask = numpy.array(Image.open("21.jpg"))  # 配置一个mask参数,生成该图片形状的词云
    contents = ''.join(content)  # 拼接所给的内容,如果所给的是列表那么将列表中的内容拼接起来,如果是字典那么拼接其所有键
    content_cut = jieba.cut(contents, cut_all=False)  # jieba.cut用来分词,cut_all参数用来控制全模式(True)或者精确模式分词(False)
    content_space_split = ' '.join(content_cut)  # 用空格将分词结果拼接起来
    result = WordCloud('simhei.ttf',
                       mask=mask,
                       background_color='white',  # 背景颜色
                       width=1000,
                       height=600, ).generate(content_space_split)  # 创建词云
    result.to_file('%s.png' % savename)  # 将词云保存为图片


if __name__ == "__main__":
    comment = spider_xiaowangzi()
    create_wordcloud(comment, '小王子词云评论')

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值