python__wordcloud生成词云

1、完成目标:

爬取书评或者影评然后获取其评论词,并制作词云,如图所示
  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('(.*?)',
                             data)  # 十几岁的时候渴慕着小王子,一天之间可以看四十四次日落。是在多久之后才明白,看四十四次日落的小王子,他有多么难过。

        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, '小王子词云评论')

你可能感兴趣的:(python基础,python,django,flask)