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

Python爬虫案例五:将获取到的文本生成词云图

基础知识:

# 词云图 wordcloud
# 1、导包 jieba  wordcloud
import jieba
from wordcloud import WordCloud
data = '全年经济社会发展主要目标任务圆满完成'
data_list = list(jieba.cut(data))
# print(data_list)  # generator数据类型

# 2、构造词云图样式  ===》虚拟的词云图
wb = WordCloud(
    width=500,
    height=500,
    background_color='white',
    font_path='C:\Windows\Fonts\msyh.ttc'  //window中找到此路径,字体为微软雅黑
)
# 3、添加数据
wb.generate(' '.join(data_list))  # 这里的字符串是否已经进行了切割
# 4、虚拟词云图保存到本地,注意:名字必须要用png,png属于无损压缩,jpg属于有损压缩
wb.to_file('xxx.png')  

案例实战:

源码:
# 抓取政府工作报告的文本
import requests, os, jieba, numpy
from lxml import etree
from wordcloud import WordCloud
from PIL import Image  # 装库:pip install pillow
class OneSpider(object):
    def __init__(self):
        pass
    def  request_start_url(self):
        # 爬虫部分
        start_url = 'https://www.ynbdm.cn/news.php'
        cookies = {
            'PHPSESSID': 'rpkr2o2rots8pe0mr9dp0kn0d1',
        }
        headers = {
            'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'accept-language': 'zh-CN,zh;q=0.9',
            'cache-control': 'max-age=0',
            # 'cookie': 'PHPSESSID=rpkr2o2rots8pe0mr9dp0kn0d1',
            'priority': 'u=0, i',
            'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': '"Windows"',
            'sec-fetch-dest': 'document',
            'sec-fetch-mode': 'navigate',
            'sec-fetch-site': 'none',
            'sec-fetch-user': '?1',
            'upgrade-insecure-requests': '1',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
        }
        params = {
            'id': '31039',
        }
        response = requests.get(start_url, params=params, cookies=cookies, headers=headers).text
        self.parse_response(response)

    def parse_response(self, response):
        # 解析响应
        A = etree.HTML(response)
        # bt = A.xpath('//title/text()')[0].replace('!', '')
        nr = A.xpath('//div[@class="content_show"]//text()')
        nr = ''.join(nr)
        with open('政府工作报告.txt', 'w', encoding='utf-8') as f:
            f.write(nr)
        print('ok -- 政府工作报告.txt')

    def show_image(self):
        # 词云图部分
        # --------1、读文本-------------
        data = open('政府工作报告.txt', 'r', encoding='utf-8').read()
        # --------2、jieba切割-----------
        data_list = list(jieba.cut(data))
        # --------3、粗略处理文本---------
        data_list = [i for i in data_list if len(i) != 1]
        # --------4、精确处理文本(过滤敏感信息,称为停用词)----------
        tyc = open('../stop_words.txt', 'r', encoding='utf-8').read()
        tyc = tyc.split('\n')
        data_list = [i for i in data_list if i not in tyc]
        # print(data_list)
        # ------------------5、文本变字符串-------------
        TEXT = ' '.join(data_list)
        # --------6、添加一个背景图片------------------
        img = Image.open('../Y.jpg')  # 此处的image为一个数据类型
        mask = numpy.array(img)  # 得到矩阵形式的图片,[255 255 255 ... 255 255 255]代表RGB的含量
        # --------7、建立词云图样式------------------------
        wb = WordCloud(
            width=500,
            height=500,
            background_color='white',
            mask=mask,
            font_path='C:\Windows\Fonts\msyh.ttc',
        )
        # -------8、添加数据---------------
        wb.generate(TEXT)
        #--------9、生成本地效果-------------
        wb.to_file('第二个.png')
        print('------词云图生成完毕-----------')

    def main(self):
        if not os.path.exists('政府工作报告.txt'):
            self.request_start_url()
        else:
            self.show_image()


if __name__ == '__main__':
    on = OneSpider()
    on.main()

运行效果:

# 样式

 


http://www.kler.cn/a/286388.html

相关文章:

  • 360嵌入式开发面试题及参考答案
  • leetcode——对称二叉树(java)
  • 基于单片机的超声波液位检测系统(论文+源码)
  • python算法和数据结构刷题[2]:链表、队列、栈
  • C++模板初识
  • 分布式系统架构怎么搭建?
  • WT2605C蓝牙语音芯片:引领糖尿病管理智能化,优化血糖仪音频与蓝牙传输方案
  • VSCode手动创建SpringBoot项目的方法,及详细步骤
  • Docker通信全视角:原理、实践与技术洞察
  • 作业0828
  • 【C/C++】C++程序设计基础(输入输出、数据类型、动态内存、函数重载、内联函数、常量、引用)
  • Salt Function Flow:深度研发经验的沉淀,打造轻量级高效流程编排框架
  • 【Python报错已解决】“ModuleNotFoundError: No module named ‘timm‘”
  • 【Verilog 数字系统设计教程】Verilog 基础:硬件描述语言入门指南
  • STM32F1+HAL库+FreeTOTS学习8——第一个任务,启动!
  • 交换机自动化巡检(H3C)
  • 磐石云AXB小号平台同时支持AXYB、AXN、AXYBN
  • C++ 累加天数(牛客网)
  • MySQL5.7.36之主从复制过滤复制-centos7
  • 常用Numpy操作(笔记整理)
  • JavaScript ES6+ 新特性
  • 惠中科技 PV-Wiper 全自动光伏系统:引领光伏清洁新时代
  • EXO:StandardNode _process_tensor
  • 学习bat脚本
  • Java中的阻塞队列BlockingQueue
  • LoadBalancer负载均衡