用空间说说做词云,有趣好玩,颜值爆表

哈喽大家好,我跟大家分享Python的一个有趣玩法:用QQ空间的说说做词云。

材料准备

首先我们准备好看的血小板一只。

然后准备好Python3。

准备selenium、requests、jieba、wordcloud、matplotlib等Python包。

  • 打开终端或cmd,运行:
pip install selenium
pip install requests
pip install jieba
pip install wordcloud
pip install matplotlib

准备Chrome浏览器一只。

准备chromedriver一只(https://npm.taobao.org/mirrors/chromedriver/2.41/),下载解压后放到喜欢的路径即可。

准备QQ号一只。

开始制作

下一步我们开始制作。

首先我们导入Python包。

# -*- coding: utf-8 -*-
from selenium import webdriver
import requests
import re
import jieba.analyse
import json
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
from pylab import imread, plt
import random

导入不成功的同学需要重新pip安装对应的包。

加入请求头和你自己的账号密码。

headers = {'User-Agent': 'app of oo 1.0'}
user = '13541*****'
password = '**********'

然后使用selenium模拟登陆QQ空间,拿到cookies和qzonetoken。

def login():driver = webdriver.Chrome(executable_path='D:/chromedriver.exe')# 登陆driver.get('https://qzone.qq.com/')driver.switch_to.frame('login_frame')driver.find_element_by_id('switcher_plogin').click()driver.find_element_by_id('u').clear()driver.find_element_by_id('u').send_keys(user)driver.find_element_by_id('p').clear()driver.find_element_by_id('p').send_keys(password)driver.find_element_by_id('login_button').click()# 转主页driver.get('https://user.qzone.qq.com/{}/main'.format(user))# 进说说driver.find_element_by_id('QM_Profile_Mood_A').click()html = driver.page_sourceg_qzonetoken = re.search('window\.g_qzonetoken = \(function\(\)\{ try\{return (.*?);\} catch\(e\)',html)qzonetoken = str(g_qzonetoken[0]).split('\"')[1]cookies = driver.get_cookies()return get_cookie(cookies), qzonetoken

其中,组装cookie的方法如下。

def get_cookie(cookies):cookie_dict = {}for cookie in cookies:cookie_dict[cookie['name']] = cookie['value']return cookie_dict

然后,获取g_tk。

def get_g_tk(cookie):hashes = 5381for letter in cookie['p_skey']:hashes += (hashes << 5) + ord(letter)return hashes & 0x7fffffff

下一步我们开始抓取说说。

def get_words(cookies, g_tk, qzonetoken):words = []session = requests.session()i = 0while True:params = {'uin': user,'pos': i * 20,'num': 20,'replynum': 100,'g_tk': [g_tk, g_tk],'callback': '_preloadCallback','code_version': '1','format': 'jsonp','need_private_comment': '1','qzonetoken': qzonetoken}respond = session.get('https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6', params=params, headers=headers, cookies=cookies)data_str = re.findall('^_preloadCallback\((.*?)\);$', respond.text)[0]data_dict = json.loads(data_str)msg_list = data_dict['msglist']for msg in msg_list:word = msg['content'].replace('\n', '')# 除去表情emojis = re.findall('\[em\].*?\[/em\]', word)for emoji in emojis:word = word.replace(emoji, '')# 除去@friends = re.findall('@{.*?}', word)for friend in friends:word = word.replace(friend, '')words.append(word)if len(msg_list) < 20:return wordsi += 1

然后用结巴分词抽取关键词,结巴分词是比较流行的一个中文分词包,尽管对专业领域的分词效果尚待商榷,但对于一般业余玩家而言已经足够。取关键词的数量没有限制,想要更多词的同学可以多拿,但一般来说取关键词数量越多,划分粒度越细,关键词的“关键性”越低。

def get_keywords(words_list):keywords = []for word in words_list:# 取前K个关键词top_k = round(len(word) / 5) + 1keywords += jieba.analyse.extract_tags(word, topK=top_k)# 打乱顺序random.shuffle(keywords)return ' '.join(keywords)

最后我们制作词云。我们加入血小板图片一张作为背景,不喜欢血小板的同学可以不加。

值得注意的是,matplotlib默认不能显示中文,需要设置词云的字体路径,如本人使用win10的微软雅黑字体,则设为C:/Windows/Fonts/msyh.ttc。

def make_cloud(keywords_str):# 背景掩模color_mask = imread("xuexiaoban.jpg")wc = WordCloud(font_path="C:/Windows/Fonts/msyh.ttc",background_color="white",max_words=2000,stopwords=STOPWORDS.add("said"),mask=color_mask,max_font_size=200,random_state=100)image_colors = ImageColorGenerator(color_mask)word_cloud = wc.generate(keywords_str)plt.imshow(word_cloud.recolor(color_func=image_colors))plt.axis('off')plt.show()

一个有趣好玩,颜值爆表的词云就完成了。

技术总结

  1. 使用selenium模拟登录,并取得cookie、qzonetoken和g_tk。
  2. 用requests和正则表达式抓取说说。
  3. 用jieba抽取关键词。
  4. 用wordcloud制作词云并用matplotlib显示。不喜欢血小板的同学可以不加,喜欢凤姐的同学也可以用凤姐替代。

用python制作说说词云的技术总结完毕。

def main():cookies, qzonetoken = login()g_tk = get_g_tk(cookies)words = get_words(cookies, g_tk, qzonetoken)keywords_str = get_keywords(words)make_cloud(keywords_str)if __name__ == '__main__':main()

参考文献

[1] 用Python爬取QQ好友空间说说进行分析

[2] python——wordcloud生成中文词云

[3] 美食作家王刚

附完整代码

# -*- coding: utf-8 -*-
from selenium import webdriver
import requests
import re
import jieba.analyse
import json
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
from pylab import imread, plt
import randomheaders = {'User-Agent': 'app of oo 1.0'}
user = '13541*****'
password = '**********'# 这个函数用来解决腾讯g_tk加密算法的函数
def get_g_tk(cookie):hashes = 5381for letter in cookie['p_skey']:hashes += (hashes << 5) + ord(letter)return hashes & 0x7fffffffdef get_cookie(cookies):cookie_dict = {}for cookie in cookies:cookie_dict[cookie['name']] = cookie['value']return cookie_dictdef login():driver = webdriver.Chrome(executable_path='D:/chromedriver.exe')# 登陆driver.get('https://qzone.qq.com/')driver.switch_to.frame('login_frame')driver.find_element_by_id('switcher_plogin').click()driver.find_element_by_id('u').clear()driver.find_element_by_id('u').send_keys(user)driver.find_element_by_id('p').clear()driver.find_element_by_id('p').send_keys(password)driver.find_element_by_id('login_button').click()# 转主页driver.get('https://user.qzone.qq.com/{}/main'.format(user))# 进说说driver.find_element_by_id('QM_Profile_Mood_A').click()html = driver.page_sourceg_qzonetoken = re.search('window\.g_qzonetoken = \(function\(\)\{ try\{return (.*?);\} catch\(e\)',html)qzonetoken = str(g_qzonetoken[0]).split('\"')[1]cookies = driver.get_cookies()return get_cookie(cookies), qzonetokendef get_keywords(words_list):keywords = []for word in words_list:# 取前K个关键词top_k = round(len(word) / 5) + 1keywords += jieba.analyse.extract_tags(word, topK=top_k)# 打乱顺序random.shuffle(keywords)return ' '.join(keywords)def make_cloud(keywords_str):# 背景掩模color_mask = imread("xuexiaoban.jpg")wc = WordCloud(font_path="C:/Windows/Fonts/msyh.ttc",background_color="white",max_words=2000,stopwords=STOPWORDS.add("said"),mask=color_mask,max_font_size=200,random_state=100)image_colors = ImageColorGenerator(color_mask)word_cloud = wc.generate(keywords_str)plt.imshow(word_cloud.recolor(color_func=image_colors))plt.axis('off')plt.show()def get_words(cookies, g_tk, qzonetoken):words = []session = requests.session()i = 0while True:params = {'uin': user,'pos': i * 20,'num': 20,'replynum': 100,'g_tk': [g_tk, g_tk],'callback': '_preloadCallback','code_version': '1','format': 'jsonp','need_private_comment': '1','qzonetoken': qzonetoken}respond = session.get('https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6',params=params, headers=headers, cookies=cookies)data_str = re.findall('^_preloadCallback\((.*?)\);$', respond.text)[0]data_dict = json.loads(data_str)msg_list = data_dict['msglist']for msg in msg_list:word = msg['content'].replace('\n', '')# 除去表情emojis = re.findall('\[em\].*?\[/em\]', word)for emoji in emojis:word = word.replace(emoji, '')# 除去@friends = re.findall('@{.*?}', word)for friend in friends:word = word.replace(friend, '')words.append(word)if len(msg_list) < 20:return wordsi += 1def main():cookies, qzonetoken = login()g_tk = get_g_tk(cookies)words = get_words(cookies, g_tk, qzonetoken)keywords_str = get_keywords(words)make_cloud(keywords_str)if __name__ == '__main__':main()

用空间说说做词云,有趣好玩,颜值爆表相关推荐

  1. Day10.如何给⽑不易的歌曲做词云展示

    Python词云 今天我们做⼀个数据可视化的项⽬. 我们经常需要对分析的数据提取常⽤词,做词云展示.⽐如⼀些互联⽹公司会抓取⽤户的画像,或者每⽇讨论话题的关键词,形成词云并进⾏展示. 或者你喜欢某个歌 ...

  2. 一步一步教你如何用python做词云_一步一步教你如何用Python做词云

    前言 在大数据时代,你竟然会在网上看到的词云,例如这样的. 看到之后你是什么感觉?想不想自己做一个? 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流 ...

  3. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  4. python 做词云 -jupyter跟随王树义教程学习

    #python 做词云 -jupyter跟随王树义教程学习 参考连接 https://www.jianshu.com/p/e4b24a734ccc https://www.jianshu.com/p/ ...

  5. python 小说 云_Python给小说做词云

    闲暇时间喜欢看小说,就想着给小说做词云,展示小说的主要内容.开发语言是Python,主要用到的库有wordcloud.jieba.scipy.代码很简单,首先用jieba.cut()函数做分词,生成以 ...

  6. 做词云时报错cannot import name ‘WordCloud‘ from partially initialized module ‘wordcloud‘的解决办法

    问题: 在做词云时,运行时出现该问题,wordcloud安装成功,但运行出错,错误提示是:cannot import name 'WordCloud' from partially initializ ...

  7. 手机python软件怎么下载词云_从零开始教你用 Python 做词云

    原标题:从零开始教你用 Python 做词云 雷锋网按:本文作者王树义,原载于微信公众号玉树芝兰(nkwangshuyi),雷锋网经授权发布. 临渊羡鱼,不如退而结网.我们步步为营,从头开始帮助你用P ...

  8. 如何用Python 制作词云-对1000首古诗做词云分析

    主页: https://codeshellme.github.io 今天来介绍一下如何使用 Python 制作 词云 . 词云又叫文字云,它可以统计文本中频率较高的词,并将这些词可视化,让我们可以直观 ...

  9. 如何用Python做词云?(基础篇视频教程)

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开.如有需要,请点击文末的"阅读原文"按钮 ...

最新文章

  1. linux 磁盘维护 swapon swapoff 简介
  2. 若兰-nvjdc 1.3新版本安装及老版本升级教程
  3. 【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )
  4. 解决:pycharm中动画函数animation.FuncAnimation不起作用
  5. 【Python CheckiO 题解】Long Repeat
  6. mybatis那些事~
  7. 创建服务factory和service方法的区别
  8. 批处理文件中获取当前所在路径的几种方法,以及写文件到txt
  9. 大道至简——书摘与思考
  10. 手机写代码 termux
  11. SiO2 介孔二氧化硅纳米颗粒的明胶包裹/二氧化硅杂化凝胶固定化醇脱氢酶/白蛋白和壳聚糖包裹的二氧化硅微球/二氧化硅包覆的量子点荧光编码微球
  12. 精彩收集的303个透明flash代码
  13. html隐藏域倒计时,一个网页倒计时的实现
  14. 计算机硬盘电源接口,硬盘电源接口图解
  15. Docker容器无法解析域名
  16. android电商平台,基于Android的电商平台通用客户端的设计与实现
  17. NBUT - 1077 骨牌铺方格 【递推】
  18. HTML5期末大作业:美食主题网站设计——美食零食官网响应式网页设计(6页) HTML+CSS+JavaScript
  19. uni-app真机调试链接不上网易im服务器
  20. 量化:纸上得来终觉浅,绝知此事要躬行。

热门文章

  1. Java就业的方向有哪些-隐藏的小职业~~
  2. boos里的AHCI RAID_希洛克团本详解 DNF国服环境下Raid困难模式
  3. ant design vue日历增加小圆点
  4. linux创建快捷方式
  5. 一代商圣胡雪岩 读书心得
  6. 简单数学--排列之全排错
  7. 【数据结构|链表】单链表基本操作
  8. java中的fun函数_使用Kotlin开发Android--常见的fun函数定义
  9. 小米开机动画android,华为nova 5官方图赏 小米CC开机动画首曝光
  10. Flower 的定义