精华内容
下载资源
问答
  • Python爬虫数据可视化之词云
    2021-08-20 17:45:48

    效果图:

    1.准备一张合适的图片

    2.导入需要的包:

    import jieba                            # 分词
    import pymysql                          # 数据库
    from matplotlib import pyplot as plt    # 绘图,数据可视化
    from wordcloud import WordCloud         # 词云
    from PIL import Image                   # 图片处理
    import numpy as np                      # 矩阵运算

    3.从数据库里拿数据(下面的connet填写自己对应的信息)

    # 准备词云所需的文字(词)
    con = pymysql.connect(host='', user='', password='', database='')
    cur = con.cursor()
    sql = 'select introduction from movie250'
    cur.execute(sql)
    data = cur.fetchall()
    text = ""
    for item in data:
        text = text + item[0]
    cur.close()
    con.close()

    4.利用导入的jieba包对我们的数据进行分词操作

    # 分词
    cut = jieba.cut(text)
    string = ' '.join(cut)

    5.词->图片,设置字体,背景等

    img = Image.open(r'.\static\assets\img\tree.jpg')   # 打开遮罩图片
    img_array = np.array(img)   # 将图片转换为数组
    wc = WordCloud(
        background_color='white',
        mask=img_array,
        font_path="msyh.ttc"    # 字体所在位置:C:\Windows\Fonts
    )
    wc.generate_from_text(string)

    6.绘制图片到界面并输出到指定路径

    # 绘制图片
    fig = plt.figure(1)
    plt.imshow(wc)
    plt.axis('off')     # 是否显示坐标轴
    
    plt.show()    # 显示生成的词云图片
    print("ok")
    
    # 输出词云图片到文件
    plt.savefig(r'.\static\assets\img\treeWorldCould.jpg', dpi=500)

    更多相关内容
  • python爬虫词云

    2018-05-26 11:41:42
    简单好用的词云程序包。可以连接微信朋友圈,内置爬虫程序。
  • Python爬取全网所有书籍,只需要填写书籍连接即可,后台会自动运行爬虫,下载书籍文本到本地,最后会根据智能词云算法开启分词,之后依靠pyecharts这个强大的库,进行词云分析及其展示。全程一键化,没有烦恼,快来...
  • 爬取指定新闻网站,将爬取到的数据做词频统计生成词云图,做相应的词频分析饼状图,柱状图,散点图。最后将词频数据存至MySQL数据库。

             爬取指定新闻网站,将爬取到的数据做词频统计生成词云图,做相应的词频分析饼状图,柱状图,散点图。最后将词频数据存至MySQL数据库。

            编译环境:PyCharm

            数据库下载:AppServ8.5

           需用到的模块有:

    import time
    from PySide2.QtCore import QFile
    from PySide2.QtGui import QPixmap
    from PySide2.QtWidgets import QApplication, QGraphicsScene, QGraphicsPixmapItem
    from PySide2.QtUiTools import QUiLoader
    from urllib import request
    from bs4 import BeautifulSoup
    import wordcloud  # 词云图
    import collections
    import jieba
    import re
    import numpy as np
    from PIL import Image
    import threading    # 多线程
    from string import punctuation as Englishpunctuation    # 获取英文标点集合
    from zhon.hanzi import punctuation as zhonpunctuation       # 获取中文标点集合
    from selenium import webdriver
    import csv
    import xlwt
    import pymysql
    import pyecharts.options as opts
    from pyecharts.charts import Pie,Bar,EffectScatter
    from pyecharts.globals import ThemeType

            主程序:

    import time
    from PySide2.QtCore import QFile                    # .ui文件获取
    from PySide2.QtGui import QPixmap                   # 加载图片
    from PySide2.QtWidgets import QApplication, QGraphicsScene, QGraphicsPixmapItem    # 加载图片
    from PySide2.QtUiTools import QUiLoader
    from urllib import request      # 爬取URL
    from bs4 import BeautifulSoup   # 筛取爬完的html文件
    import wordcloud  # 词云图
    import collections      # 词频计数
    import jieba            # 分词
    import re
    import numpy as np
    from PIL import Image   # 加载图片
    import threading    # 多线程
    from string import punctuation as Englishpunctuation    # 获取英文标点集合
    from zhon.hanzi import punctuation as zhonpunctuation       # 获取中文标点集合
    import showpie     # 自己定义
    from selenium import webdriver  # 用浏览器打开html
    import 数据库      # 自己定义
    import CSV  # 自己定义
    # 三个ui文件“UI.ui”,"denlu.ui","zhuce.ui"
    # 词云图片保存为“wc.png”
    # 词云数据保存为“word_counts_topALL.text”
    # xls文件保存为“myexcel.xls”
    # 数据库 URL:"http://localhost:8080/phpMyAdmin/"   登录名:root  密码:12345678  数据库名:db.db
    url = []
    url_sina = ['https://news.sina.com.cn/c/xl/2022-01-01/doc-ikyakumx7683060.shtml','https://news.sina.com.cn/o/2022-01-01/doc-ikyamrmz2472300.shtml','https://news.sina.com.cn/o/2022-01-01/doc-ikyamrmz2467548.shtml',
         'https://news.sina.com.cn/c/2022-01-01/doc-ikyamrmz2515302.shtml','https://news.sina.com.cn/c/2021-12-31/doc-ikyamrmz2441156.shtml','https://finance.sina.com.cn/roll/2022-01-01/doc-ikyakumx7644198.shtml',
         'https://news.sina.com.cn/c/2021-12-31/doc-ikyakumx7537811.shtml','https://news.sina.com.cn/w/2021-12-30/doc-ikyamrmz2171966.shtml','https://news.sina.com.cn/c/2022-01-01/doc-ikyakumx7666807.shtml',
         'https://news.sina.com.cn/c/xl/2021-12-30/doc-ikyakumx7357600.shtml']
    url_163 = ['https://www.163.com/dy/article/GSG29CEJ05346RC6.html',
               'https://www.163.com/dy/article/GSIEC0U70514R9OJ.html', 'https://www.163.com/dy/article/GSGOQOQE05346RC6.html','https://www.163.com/dy/article/GSK18CJD0514R9OJ.html'
             'https://www.163.com/news/article/GSIBLSAH000189FH.html','https://www.163.com/dy/article/GSKR7DJ60514R9M0.html','https://www.163.com/dy/article/GSH9FIT90514R9M0.html?clickfrom=w_yw','https://www.163.com/gov/article/GD3TBM6R002399RB.html'
             'https://www.163.com/dy/article/GA4CC6I20512D3VJ.html','https://www.163.com/dy/article/GSKP64C80514R9OJ.html']
    url_ifeng = ['https://news.ifeng.com/c/8CRYT9RnXii', 'https://news.ifeng.com/c/8CQQcdns5Jg','https://news.ifeng.com/c/8CRl1IGC2vG','https://news.ifeng.com/c/8CRE4AyY0NX','https://finance.ifeng.com/c/8CRE4AyY0P0',
                 'https://news.ifeng.com/c/8CCxj8nMaVl','https://news.ifeng.com/c/8CQKzempy4j','https://news.ifeng.com/c/8CRa0Nir1bc','https://news.ifeng.com/c/8CRYT9RnXkL','https://news.ifeng.com/c/8CRU98XbWBp']
    url.append(url_sina);url.append(url_163);url.append(url_ifeng)
    
    
    class UIPython:
        def __init__(self):
            # 从文件中加载UI定义
            qfile = QFile("UI.ui")
            qfile.open(QFile.ReadOnly)
            qfile.close()
            # 从 UI 定义中动态 创建一个相应的窗口对象
            self.ui = QUiLoader().load(qfile)
            self.ui.ciyunButton.clicked.connect(self.ciyun)
    
        # 将爬取内容写入html文件 使用异常处理防止反爬导致程序崩溃停止
        def writetext(self, url_name, address):
            with open(address, mode='w', encoding='utf-8') as f:
                f.write('')
            for j in url_name:
                try:
                    r = request.Request(j)
                    r.add_header('User-agent', 'PyMOTW(https://pymotw.com/)')
                    responce = request.urlopen(r)
                except Exception as e:
                    print("页面加载失败{0}\n".format(j))
                data = responce.read().decode('utf-8', 'ignore')
                with open('try.html', mode='a', encoding='utf-8') as f:
                    f.write(data)
                data = BeautifulSoup(data, 'lxml')
                data_title = list(data.find_all('title'))
                data_content = list(data.find_all('content'))
                data_page = list(data.find_all('p'))
                with open(address, mode='a', encoding='utf-8') as f:
                    for i in data_title:
                        f.write(str(i.text) + '\n')
                    for i in data_content:
                        f.write(str(i.text) + '\n')
                    for i in data_page:
                        f.write(str(i.text) + '\n')
    
        # 定义词云格式
        def definewc(self):
            # 获取UI.ui界面内容
            max_words = self.ui.max_words.currentText()
            max_font_size = self.ui.max_font_size.currentText()
            colormap = self.ui.colormap.currentText()
            background_color = self.ui.background_color.currentText()
            font_path = self.ui.font_path.currentText()
            mask = self.ui.maskname.currentText()
            contour_color = self.ui.contour_color.currentText()
            contour_width =self.ui.contour_width.text()
    
            # 获取字体
            if font_path == '中文简体':
                font_path = 'fonts\simfang.ttf'
            elif font_path == '方正舒体':
                font_path='fonts\FZSTK.TTF'
            elif font_path == '华文行楷':
                font_path='fonts\STXINGKA.TTF'
    
            # 获取mask
            if mask == '中国地图':
                mask = np.array(Image.open('E://语音包//ChinaMap.png'))  # 定义词频背景
            elif mask == '爱丽丝':
                mask = np.array(Image.open('E://语音包//alice_mask.png'))
    
            # 设置词云格式
            wc = wordcloud.WordCloud(
                font_path=str(font_path),  # 设置字体格式
                background_color=str(background_color),
                mask=mask,  # 设置背景图
                colormap=str(colormap),
                max_words=int(max_words),  # 最多显示词数
                max_font_size=int(max_font_size),  # 字体最大值
                contour_color=contour_color,
                contour_width=int(contour_width)
            )
            return wc
    
        # 展示词云
        def showwordcloud(self, address):
            with open(address, mode='r', encoding='utf-8') as f:
                string_data = f.read()
            # 文本预处理
            for i in Englishpunctuation:
                string_data = string_data.replace(i, '')            # 删除标点符号
            for i in zhonpunctuation:
                string_data = string_data.replace(i, '')
            string_data = re.sub('[a-zA-Z]', '', string_data)       # 删除英文
            string_data = re.sub('[\d]', '', string_data)           # 删除数字
            # 文本分词
            seg_list_exact = jieba.cut(string_data, cut_all=False)  # 精确模式分词
            object_list = []
            remove_words = [u'的', u'和', u'是', u'随着', u'对于', u'对', u'等', u'能', u'都', u'中', u'在', u'了',u'通常', u'如果', u'我们', u'需要', u'他', u'要', u"\u3000", u'年', u'月', u'也', u'你'
                            , u'\n', u' ', u'▎']  # 自定义去除词库
    
            for word in seg_list_exact:  # 循环读出每个分词
                if word not in remove_words:  # 如果不在去除词库中
                    object_list.append(word)  # 分词追加到列表
    
            # 词频统计
            word_counts = collections.Counter(object_list)  # 对分词做词频统计
            maxword_number = self.ui.number.currentText()
            word_counts_top = word_counts.most_common(int(maxword_number))  # 获取前10最高频的词
            word_counts_topall = word_counts.most_common()
            print(word_counts_top)  # 输出检查
    
            # 词频展示
            wc = self.definewc()
            wc.generate_from_frequencies(word_counts)  # 从字典生成词云
            wc.to_file('wc.png')
    
            # 将词云图加载到UI.ui界面
            self.ui.GraphView.scene_img = QGraphicsScene()
            self.imgShow = QPixmap()
            self.imgShow.load('wc.png')
            self.imgShowItem = QGraphicsPixmapItem()
            self.imgShowItem.setPixmap(QPixmap(self.imgShow))
            self.ui.GraphView.scene_img.addItem(self.imgShowItem)
            self.ui.GraphView.setScene(self.ui.GraphView.scene_img)
            self.ui.GraphView.fitInView(QGraphicsPixmapItem(QPixmap(self.imgShow)))
    
            # 将词云结果插入MySQL数据库
            数据库.insertdb(word_counts_topall)
    
            # 写入“word_counts_topALL.text”文本
            with open("word_counts_topALL.text", mode='w', encoding='utf8') as f:
                for i in word_counts_topall:
                    f.write(i[0]+'\t'+str(i[1])+'\n')
    
            # 写入.csv和.xls
            CSV.writecsv(word_counts_topall)
            CSV.openxls()
    
            # 获取选择的图形颜色
            colour = self.ui.colour.currentText()
            if colour == 'blue':colour = '#abddff'
            elif colour == 'yellow':colour = '#ffff7f'
            elif colour == 'green':colour = '#7cff9d'
            elif colour == 'red':colour = '#ff0000'
    
            # 生成分析图形
            word = []
            for i in word_counts_top:
                word.append(list(i))
            tuxing = self.ui.tuxing.currentText()
            if tuxing == '饼状图':
                showpie.pietu(word, colour)
            elif tuxing == '柱状图':
                showpie.Bartu(word, colour)
            elif tuxing == '散点图':
                showpie.Scatter(word, colour)
    
            # 设置显示图片守护线程
            thread1 = threading.Thread(target=self.keepdriver)
            thread1.setDaemon(True)
            thread1.start()
    
        # 使html在游览器上循环出现
        def keepdriver(self):
            driver = webdriver.Edge()
            while(True):
                driver.get('file://C://Users//hp//Desktop//Python//课设//Lib//customized.html')
                driver.maximize_window()
                time.sleep(1000)
    
        # 词云主程序
        def ciyun(self):
            url_address=self.ui.news_address.currentText()
    
            if url_address == '新浪新闻':
                url_address = url[0]
                address = 'news_sina.html'
            elif url_address == '网易新闻':
                url_address = url[1]
                address = 'news_163.html'
            elif url_address == '凤凰新闻':
                url_address = url[2]
                address = 'news_ifeng.html'
            self.writetext(url_address, address)
            self.showwordcloud(address)
    
    
    # 登陆界面
    class Denlu:
        def __init__(self):
            # 从文件中加载UI定义
            qfile = QFile("denlu.ui")
            qfile.open(QFile.ReadOnly)
            qfile.close()
            # 从 UI 定义中动态 创建一个相应的窗口对象
            self.ui = QUiLoader().load(qfile)
            self.ui.acknowledge.clicked.connect(self.acknowledge)
            self.ui.delete_2.clicked.connect(self.ui.close)
            self.ui.zhuce.clicked.connect(self.zhuce)
    
        # 确认按钮程序
        def acknowledge(self):
            name = self.ui.name.text()
            password = self.ui.password.text()
            if 数据库.searchusername_password(name, password):
                self.state = UIPython()
                self.state.ui.show()
                self.ui.close()
            elif name == '' or password == '':
                self.ui.Error.setText('Error! Do not enter a user name or password')
            else:
                self.ui.Error.setText('Error! Incorrect user name or password')
    
        # 注册按钮程序
        def zhuce(self):
                self.zhuce = Zhuce()
                self.zhuce.ui.show()
                self.ui.close()
    
    
    # 注册界面
    class Zhuce:
        def __init__(self):
            # 从文件中加载UI定义
            qfile = QFile("zhuce.ui")
            qfile.open(QFile.ReadOnly)
            qfile.close()
            # 从 UI 定义中动态 创建一个相应的窗口对象
            self.ui = QUiLoader().load(qfile)
            self.ui.submit.clicked.connect(self.submit)
            self.ui.delete_2.clicked.connect(self.ui.close)
    
        # 提交按钮————MySQL数据库
        def submit(self):
            username = self.ui.username.text()
            password = self.ui.password.text()
            password1 = self.ui.password1.text()
            if username == '' or password == '' or password1 == '':
                self.ui.Error.setText('Error! Do not enter a user name or password')
            elif password != password1:
                self.ui.Error.setText('Error! Two times to enter the password do not match')
            else:
                if 数据库.searchusername(username):
                    数据库.insertusername(username, password)
                    self.denlu = Denlu()
                    self.denlu.ui.show()
                    self.ui.close()
                else:
                    self.ui.Error.setText('Error! 用户名重复')
    
    
    app = QApplication([])
    denlu=Denlu()
    denlu.ui.show()
    # 设置守护线程
    thread = threading.Thread(target=app.exec_())
    thread.setDaemon(True)
    thread.start()

            展示分析图片程序:

    import pyecharts.options as opts
    from pyecharts.charts import Pie,Bar,EffectScatter
    from pyecharts.globals import ThemeType
    # 图形保存为“customized.html”
    
    
    # 饼图
    def pietu(data_pair,colour):
        data_pair.sort(key=lambda x: x[1])  # 排序
        c = (
            # 初始化
            Pie(init_opts=opts.InitOpts(
                width="900px",
                height="600px",
                theme=ThemeType.MACARONS))
                .add(
                series_name="访问来源",  # 系列名称
                data_pair=data_pair,  # 系列数据项,格式为 [(key1, value1), (key2, value2)]
    
                # 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
                # radius:扇区圆心角展现数据的百分比,半径展现数据的大小
                # area:所有扇区圆心角相同,仅通过半径展现数据大小
                rosetype="radius",
    
                # 饼图的半径
                radius="55%",
    
                # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
                # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
                center=["50%", "50%"],
    
                # 标签配置项
                label_opts=opts.LabelOpts(is_show=False, position="center"),
            )
    
                # 全局配置项
                .set_global_opts(
                # 设置标题
                title_opts=opts.TitleOpts(
                    title="Customized Pie",
                    pos_left="center",
                    pos_top="20",
                    title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
                ),
                # 设置图例
                legend_opts=opts.LegendOpts(is_show=True),
            )
    
                # 系统配置项
                .set_series_opts(
                # 设置提示框
                tooltip_opts=opts.TooltipOpts(
                    trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
                ),
                label_opts=opts.LabelOpts(color=colour),
            ).render("customized.html")
        )
    
    
    # 柱状图
    def Bartu(data_pair, colour):
        data_pair.sort(key=lambda x: x[1])  # 排序
        x1 = [];y1 = []
        for i in data_pair:
            x1.append(i[0]);y1.append(i[1])
        c = (
            Bar(init_opts=opts.InitOpts(
                width="900px",
                height="600px",
                theme=ThemeType.MACARONS)).add_xaxis(x1).add_yaxis('频率', y1).set_colors(colour).set_global_opts(
                title_opts=opts.TitleOpts(title="新闻词出现频率"),
                yaxis_opts=opts.AxisOpts(name="频率"),
                xaxis_opts=opts.AxisOpts(name="词"))
        ).render("customized.html")
    
    
    # 散点图
    def Scatter(data_pair, colour):
        x1 = [];y1 = []
        for i in data_pair:
            x1.append(i[0]);y1.append(i[1])
        c = (
            EffectScatter(init_opts=opts.InitOpts(
                width="900px",
                height="600px",
                theme=ThemeType.MACARONS)).add_xaxis(x1).add_yaxis('频率', y1).set_colors(colour).set_global_opts(
                title_opts=opts.TitleOpts(title="新闻词出现频率"),
                yaxis_opts=opts.AxisOpts(name="频率"),
                xaxis_opts=opts.AxisOpts(name="词"))
        ).render("customized.html")

    数据库登陆方法:localhost:8080 / localhost | phpMyAdmin 4.6.4http://localhost:8080/phpMyAdmin/

    数据库程序:

    import pymysql
    
    
    # 向MySQL服务器插入词云数据
    def insertdb(data_pair):
        db = pymysql.connect(host='localhost', user='root', password='12345678', db='DB', charset='utf8')
        cursor = db.cursor()
    
        cursor.execute("DROP TABLE IF EXISTS CIYUN")
        sql = """CREATE TABLE CIYUN(
                NAME CHAR(100) NOT NULL,
                NUMBER INT )"""
        cursor.execute(sql)
    
        sql = "INSERT INTO CIYUN(NAME,NUMBER) \
               VALUES (%s,%s)"
    
        data_pair1 = []
        for i in data_pair:
            data_pair1.append((i[0], str(i[1])))
        data_pair1 = tuple(data_pair1)
    
        for i in data_pair1:
            cursor.execute(sql, i)
        db.commit()
        db.close()
    
    
    # 在MySQL服务器中搜索用户名和密码
    def searchusername_password(usename,usepassword):
        db = pymysql.connect(host='localhost', user='root', password='12345678', db='DB', charset='utf8')
        cursor = db.cursor()
        sql = "SELECT * FROM USERNAME"
        cursor.execute(sql)
        results = cursor.fetchall()
        for row in results:
            if row[0] == usename and row[1] == usepassword:
                db.close()
                return 1
        return 0
    
    
    # 在MySQL服务器中搜索用户名
    def searchusername(usename):
        db = pymysql.connect(host='localhost', user='root', password='12345678', db='DB', charset='utf8')
        cursor = db.cursor()
        sql = "SELECT * FROM USERNAME"
        cursor.execute(sql)
        results = cursor.fetchall()
        for row in results:
            if row[0] == usename:
                db.close()
                return 0
        return 1
    
    
    # 注册用户名和密码
    def insertusername(username, usepassword):
        db = pymysql.connect(host='localhost', user='root', password='12345678', db='DB', charset='utf8')
        cursor = db.cursor()
        sql = "INSERT INTO USERNAME(NAME,PASSWORD) \
                VALUES (%s,%s)"
        value = (str(username), str(usepassword))
        cursor.execute(sql, value)
        db.commit()
        db.close()
    
    
    # 辅助测试用 主程序并未调用 可删除
    def creatusername():
        db = pymysql.connect(host='localhost', user='root', password='12345678', db='DB', charset='utf8')
        cursor = db.cursor()
        cursor.execute("DROP TABLE IF EXISTS USERNAME")
        sql = """CREATE TABLE USERNAME(
                    NAME CHAR(100) NOT NULL,
                    PASSWORD  CHAR(100))"""
    
        cursor.execute(sql)
        sql = "INSERT INTO USERNAME(NAME,PASSWORD) \
                VALUES (%s,%s)"
    
        value = (('2537148609', '12345678'), ('yangqun', 'kuaile'))
        for i in value:
            cursor.execute(sql, i)
        db.commit()
        db.close()

            .csv 文件和和 .xls文件程序:

    import csv
    import xlwt
    # csv文件保存为“ciping.csv”
    # xls文件保存为“myexcel.xls”
    
    
    # 写csv文件
    def writecsv(data_pair):
        headers = ['词语', '频率']
        data_pair1 = []
        for i in data_pair:
            data_pair1.append((i[0], str(i[1])))
        with open('ciping.csv',mode='w',encoding='utf8') as f:
            f_csv = csv.writer(f)
            f_csv.writerow(headers)
            f_csv.writerows(data_pair1)
    
    
    # 写xls文件
    def openxls():
        myexcel = xlwt.Workbook()
        # 新建sheet页
        mysheet = myexcel.add_sheet("testsheet")
        # 打开csv文件,事实证明file和open 效果一样的,网上建议用open打开
        with open("ciping.csv",mode='r',encoding='utf8') as csvfile:
            reader = csv.reader(csvfile)
            l = 0
            # 通过循环获取单行信息
            for line in reader:
                r = 0
                # 通过双重循环获取单个单元信息
                for i in line:
                    # 通过双重循环写入excel表格
                    mysheet.write(l, r, i)
                    r += 1
                l += 1
            # 最后保存到excel
            myexcel.save("myexcel.xls")

    展开全文
  • python爬虫生成词云

    千次阅读 2018-05-30 17:54:21
    python爬虫生成词云只生成词云还是比较简单的,网上教程还是比较多的,在这作为爬虫菜鸟就稍稍献丑献丑,请勿多怪一、首先,我们需要用到的库有 jieba、matplolib、wordcloud。 jieba 是一个python实现的分词库,对...

    python爬虫生成词云

    只生成词云还是比较简单的,网上教程还是比较多的,在这作为爬虫菜鸟就稍稍献丑献丑,请勿多怪

    一、首先,我们需要用到的库有 jieba、matplolib、wordcloud。

     jieba 是一个python实现的分词库,对中文有着很强大的分词能力。

    了解请戳 https://www.cnblogs.com/jiayongji/p/7119065.html

    Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型地2D图表和一些基本的3D图表。

    了解请戳 https://www.cnblogs.com/TensorSense/p/6802280.html

    wordcloud是基于Python的词云生成类库。

    (了解请戳 https://blog.csdn.net/heyuexianzi/article/details/76851377

    二、上代码(借鉴 https://www.cnblogs.com/franklv/p/6995150.html

    text = open('name.txt').read()
    wl = " ".join(text)
    result=jieba.analyse.textrank(text,topK=100,withWeight=True)
    # print result
    keywords = dict()
    for i in result:
        keywords[i[0]] = i[1]
    # print keywords
    
    
    color_mask = plt.imread("a.jpg")
    cloud = WordCloud(
        font_path="C:\Windows\Fonts\simfang.ttf",
        background_color='white',
        mask=color_mask,
        max_words=1000,
        stopwords = STOPWORDS,
        random_state = 30,            # 设置有多少种随机生成状态,即有多少种配色方案
        scale=.5
        # max_font_size=40
    )
    word_cloud = cloud.generate_from_frequencies(keywords)
    word_cloud.to_file("a2.png")
    plt.imshow(word_cloud)
    plt.axis('off')
    plt.show()

    三、注意

    先准备一张背景图片,这张背景图片呢,要类似于这样,最好背景是空白的,这样才会有轮廓呦!当然,ps大神那就没什么顾虑啦,换个背景就行,可是不会的就自己翻翻找找啦。右图就是生成的词云图。

             

    四、还有还有,这个词云的词语来源是闺蜜的空间说说呦(借鉴的人家的代码呦)

    代码代码

    # -*- coding:utf-8 -*-
    import time
    from selenium import webdriver
    from lxml import etree
    import sys
    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    
    driver = webdriver.Firefox()
    driver.get("http://i.qq.com")
    driver.maximize_window()
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0'
    headers = {'User-Agent': user_agent}
    
    
    driver.switch_to.frame("login_frame")
    driver.find_element_by_id("switcher_plogin").click()
    time.sleep(2)
    driver.find_element_by_id("u").send_keys('你的账号')
    driver.find_element_by_id("p").send_keys("你的密码")
    driver.find_element_by_id("login_button").click()
    time.sleep(2)
    driver.switch_to.default_content()
    driver.get("http://user.qzone.qq.com/" + "朋友qq" +"/311")
    
    next_num = 0
    while True:
            for i in range(1,6):
                height = 20000*i
                strWord = "window.scrollBy(0,"+str(height)+")"
                driver.execute_script(strWord)
                time.sleep(4)
    
            driver.switch_to.frame("app_canvas_frame")
            selector = etree.HTML(driver.page_source)
            divs = selector.xpath('//*[@id="msgList"]/li/div[3]')
    
    
            with open('qq_word.txt','a') as f:
                for div in divs:
                    qq_name = div.xpath('./div[2]/a/text()')
                    qq_content = div.xpath('./div[2]/pre/text()')
                    qq_time = div.xpath('./div[4]/div[1]/span/a/text()')
                    qq_name = qq_name[0] if len(qq_name)>0 else ''
                    qq_content = qq_content[0] if len(qq_content)>0 else ''
                    qq_time = qq_time[0] if len(qq_time)>0 else ''
                    print(qq_name,qq_time,qq_content)
                    f.write(qq_content+"\n")
    
            if driver.page_source.find('pager_next_' + str(next_num)) == -1:
             break
    
            driver.find_element_by_id('pager_next_' + str(next_num)).click()
            next_num += 1
            driver.switch_to.parent_frame()

    注意注意这个frame有些麻烦,可以试试这几种用法

    driver.switch_to.frame(0)  # 1.用frame的index来定位,第一个是0
    driver.switch_to.frame("frame1")  # 2.用id来定位
    driver.switch_to.frame("myframe")  # 3.用name来定位
    driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))  # 4.用WebElement对象来定位

    
    


    展开全文
  • 1.requests (爬虫部分需要) 2.parsel (爬虫部分需要) 3.jieba (词云部分需要) 4.WordCloud (词云部分需要) 5.PIL (词云部分需要) 下载操作如下:打开cmd后输入以下内容 二.爬虫部分代码 主要分为四大步,...

    一.首先需要导入几个库

            1.requests   (爬虫部分需要)

            2.parsel   (爬虫部分需要)

            3.jieba   (词云部分需要)

            4.WordCloud   (词云部分需要)

            5.PIL   (词云部分需要)

    下载操作如下:打开cmd后输入以下内容

     

    二.爬虫部分代码

     主要分为四大步,数据解析选用的是Xpath的转换方式

     

    三.词云部分代码

    首先:自己定义一个txt文件存放需要展示的词语

    然后:自行选择一个图片

    以上部分均需要保存至与代码相同路径

    展开全文
  •  我每个月都要读一本书写一个书评,...于是想到用爬虫爬取评论来提取关键词,试验下来发现效果不错。  有了思路接下来要看怎么实现了,由于我本人是写java语言的,而java语言上并没有很好词云工具,于是自然想到...
  • 期末复习比较忙过段时间来专门写scrapy框架使用,今天介绍如何用python生成词云,虽然网上有很多词云生成工具,不过自己用python来写是不是更有成就感。今天要生成的是励志歌曲的词云,百度文库里面找了20来首,如...
  • 利用爬虫词云分析

    2020-12-08 18:24:30
    首先跟大家解释下,为什么更新的是关于爬虫的...今天,我们用爬虫来获取网页,然后再用word cloud做词云分析。一、爬虫框架的搭建1.1网络爬虫的基本思路爬虫的目的是获取网页的信息,一般的应用就是搜索引擎了。今...
  • Python爬虫入门教程01:豆瓣Top电影爬取 Python爬虫入门教程02:小说爬取 Python爬虫入门教程03:二手房数据爬取 Python爬虫入门教程04:招聘信息爬取 Python爬虫入门教程05:B站视频弹幕的爬取 PS:如有需要 Python...
  • 大家在网上经常看到,下面看一些例子:那用python生成一个词云的话怎么办呢,首先要有一些词,随便找个吧,用see you again的歌词好了,放到again.txt里面,放着待会用。然后呢,咱们用wrodcloud这个模块,他可以...
  • # -*-coding:utf-8-*- import urllib.request from bs4 import BeautifulSoup def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, ...
  • 运用java爬虫python词云

    千次阅读 2018-05-24 12:54:01
    前言: 最近有点时间,就写个东西玩玩,就是分析电影评论做成词云图。...如果不喜欢用java做爬虫的朋友,也可以换成用python语言写,过程不是很重要,看自己喜好。环境: windows 10 jdk 1.7 py...
  • 点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤昨夜西风凋碧树,独上高楼,望尽天涯路。前言大家好,我是黄伟。词云,相信大家...
  • Python爬虫作业

    2020-11-20 23:44:51
    Python爬虫+可视化实例:网易云音乐歌单/ 01 / 网页分析 01 歌单索引页 选取华语热门歌单页面。 获取歌单播放量,名称,及作者,还有歌单详情页链接。 本次一共获取了1302张华...1.5苍简0 6我终于在生活中用到Python...
  • Python爬虫、数据分析、网站开发等案例教程视频免费在线观看 https://space.bilibili.com/523606542 前文内容 Python爬虫新手入门教学(一):爬取豆瓣电影排行信息 Python爬虫新手入门教学(二):爬取小说 ...
  • Python爬取全网文字并词云分析(全程一键化!)

    千次阅读 多人点赞 2020-12-29 22:56:49
    那么作为后起之秀的编程语言——Python,它到底能够做些什么了,网上一直在“炒作”Python:一键化办公,学好Python薪资翻一番,让你的生活多一点money,让你的老板对你刮目相看,让你从此找到自信!这不是吹捧,也...
  • 使用Python定制词云

    2020-12-28 19:23:13
    前言:现在用词云的个人博客或者网站越来越多了,就类如这样:实验楼以前的一张首页部分截图其实“词云”是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉...
  • 作为爬虫小白,代码偏向简单,大佬勿喷~ 本次使用语言:Python 本次使用库:requests、wordcloud、jieba 思路 通过尝试,在网页版微博死活找不出文本url(可能是能力有限),在移动端微博找到了,所以推荐大家爬取...
  • 主要介绍了基于Python词云分析政府工作报告关键词,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 1.系统使用python django mysql scrapy技术进行开发 2.利用爬虫技术爬取某招聘网站数据,包括岗位名称,公司名称,薪资待遇,工作经验字段,拥有分页功能展示爬取的数据信息, 可以点开查看详细岗位描述信息,可以...
  • 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流行的编程语言,你不仅可以用它做数据分析和可视化,还能用来做网站、爬取数据、做数学题、写脚本替你偷懒……如果你...
  • 又到了清明时节,用python爬取了网易云音乐《清明雨上》的评论,统计词频和绘制词云图,记录过程中遇到一些问题爬取网易云音乐的评论一开始是按照常规思路,分析网页ajax的传参情况。看到参数都是加密过的,在网上...
  • Python制作词云】改变词云字体颜色

    千次阅读 多人点赞 2020-06-18 10:50:59
    改变词云字体颜色,利用 matplotlib 中 colors 这个类,通过对自定义颜色列表的修改,词云字体的颜色就会发生改变。
  • python爬虫,并将数据进行可视化分析,数据可视化包含饼图、柱状图、漏斗图、词云、另附源代码和报告书。
  • python生成词云

    2020-12-17 22:11:39
    如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流行的编程语言,你不仅可以用它做数据分析和可视化,还能用来做网站、爬取数据、做数学题、写脚本替你偷懒……如果你...
  • 目录一、环境搭建二、网络爬取数据以txt格式保存数据(一)爬取入门(二)教程示例三、生成词云图片 一、环境搭建 pip install requests pip install bs4 pip install wordcloud pip install jieba pip install cv2 ...
  • Python生成词云

    万次阅读 多人点赞 2018-06-12 15:42:35
    今天写的是怎么用Python去做词云。本来是准备用Pycharm的,但是它说我缺少Microsoft什么什么的,然后导词云包导不进去,还折腾了好久,最后放弃了Pycharm,决定用sublime了,说实话,sublime是真的强大,按照网上的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,047
精华内容 2,418
关键字:

python爬虫词云