前言

今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容

itchat安装

对微信的控制可以使用itchat来实现,我们找到itchart的官网下查看相关帮助:http://itchat.readthedocs.io/zh/latest/

我这里使用的是Python2.7,所以直接按照说明pip 安装itchat即可

1.实现给文件助手发消息

安装itchat后,使用如下的代码,即可给文件助手发一条消息,登陆时同样使用扫码登陆

import itchat

itchat.auto_login()

itchat.send('Hello, filehelper', toUserName='filehelper')

自回复消息

按照帮助说明,使用如下的示例代码可以实现消息的自动回复

import itchat

@itchat.msg_register(itchat.content.TEXT)

def text_reply(msg):

return msg.text

itchat.auto_login()

itchat.run()

用老婆大人的号测试了一下,可以实现信息的发送和直接回复

需要注意的是,使用同一个微信给自己发消息不起作用

这里为了方便多次运行,可以设置hotReload=True 变量,从而记录登陆的账号

itchat.auto_login(hotReload=True)

2.微信聊天机器人制作

官网教程还有微信机器人,所以照着教程做了一遍。试用后,发现图灵机器人的智商捉鸡,而且比较凶悍

# -*- coding: utf-8 -*-

import requests

import itchat

KEY = '71f28bf79c820df10d39b4074345ef8c'

def get_response(msg):

# 这里我们就像在“3. 实现最简单的与图灵机器人的交互”中做的一样

# 构造了要发送给服务器的数据

apiUrl = 'http://www.tuling123.com/openapi/api'

data = {

'key' : KEY,

'info' : msg,

'userid' : 'wechat-robot',

}

try:

r = requests.post(apiUrl, data=data).json()

# 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常

return r.get('text')

# 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常

# 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return

except:

# 将会返回一个None

return

# 这里是我们在“1. 实现微信消息的获取”中已经用到过的同样的注册方法

@itchat.msg_register(itchat.content.TEXT)

def tuling_reply(msg):

# 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复

defaultReply = 'I received: ' + msg['Text']

# 如果图灵Key出现问题,那么reply将会是None

reply = get_response(msg['Text'])

# a or b的意思是,如果a有内容,那么返回a,否则返回b

# 有内容一般就是指非空或者非None,你可以用`if a: print('True')`来测试

return reply or defaultReply

# 为了让实验过程更加方便(修改程序不用多次扫码),我们使用热启动

itchat.auto_login(hotReload=True)

itchat.run()

下面是我的实际测试截图

3.爬取一个好友

机器人是官网的教程,微信文章中使用的是对好友数据分布的统计,所以我先尝试实现爬取一个好友的功能

3.1 获取一个好友信息

# -*- coding: utf-8 -*-

import itchat

itchat.auto_login(hotReload=True)

#爬取自己好友相关信息, 返回一个json文件

friends = itchat.search_friends(name='Elton')

print friends

可以看到拿到的数据是一个List

3.2 打印数据到文件中

通过open函数,可以将获取到的数据写入到txt中去

# -*- coding: utf-8 -*-

import itchat

itchat.auto_login(hotReload=True)

#爬取自己好友相关信息, 返回一个json文件

friends = itchat.search_friends(name='Elton')

f = open("out.txt", "w")

print >> f, friends

f.close()

3.3 安装画图软件

为了把统计出来的柱状图绘制出来,安装matplotlib的库

至此,基本上准备条件已经完成

4. 爬取所有好友数据

爬取好友的功能如下,通过将爬取的数据存储到字典中,对性别做统计处理,可以获取总人数和性别分类的数量

def parse_friedns():

text = dict()

friedns = itchat.get_friends(update=True)[0:]

#(friedns)

male = "male"

female = "female"

other = "other"

for i in friedns[1:]:

sex = i['Sex']

if sex == 1:

text[male] = text.get(male, 0) + 1

elif sex == 2:

text[female] = text.get(female, 0) + 1

else:

text[other] = text.get(other, 0) + 1

total = len(friedns[1:])

print('好友数量:%.2f'%total)

print("男性好友: %.2f%%" % (float(text[male]) / total * 100) + "\n" +

"女性好友: %.2f%%" % (float(text[female]) / total * 100) + "\n" +

"不明性别好友: %.2f%%" % (float(text[other]) / total * 100))

draw_plot(text,u'朋友圈男女比例_')

使用了plt函数来绘制曲线

# 绘制柱状图

def draw_plot(datas,tag=''):

for key in datas.keys():

plt.bar(key, datas[key])

plt.legend()

plt.xlabel('sex')

plt.ylabel('rate')

plt.title("Gender of Alfred's friends")

if tag=='':

plt.savefig(OUTPUT+USER_NAME+'_'+u'柱状图.png')

else:

plt.savefig(OUTPUT+USER_NAME+'_'+tag+u'柱状图.png')

运行程序,爬取所有的好友数据,发现我好友一共515位,其中男性的好友占据了73%,男女比例差异有点大....

好友个性签名词云

通过使用get_friends可以爬取微信的好朋友数据,存储在'signature.txt'文件中

def parse_signature():

siglist = []

SIGNATURE_PATH='signature.txt'

friedns = itchat.get_friends(update=True)[1:]

for i in friedns:

signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")

rep = re.compile("1f\d+\w*|[<>/=]")

signature = rep.sub("", signature)

siglist.append(signature)

text = "".join(siglist)

with io.open(SIGNATURE_PATH, 'w', encoding='utf-8') as f:

wordlist = jieba.cut(text, cut_all=True)

word_space_split = " ".join(wordlist)

f.write(word_space_split)

f.close()

draw_wordcloud(SIGNATURE_PATH,tag=u'朋友圈签名')

通过对文件的解析,可以将词云绘制出来

#绘制词云

def draw_wordcloud(path,tag=''):

f = open(path,'r').read()

cut_text="".join(jieba.cut(f))

coloring = np.array(Image.open('.\\Pic\\wechat.jpg'))

wordcloud = WordCloud(font_path='./font/simhei.ttf',background_color="white",max_words=2000,mask=coloring, scale=2).generate(cut_text)

image_colors = ImageColorGenerator(coloring)

#plt.imshow(wordcloud.recolor(color_func=image_colors))

plt.imshow(wordcloud)

plt.axis("off")

if tag=='':

wordcloud.to_file(OUTPUT+USER_NAME+'_'+u'词云.png')

else:

wordcloud.to_file(OUTPUT+USER_NAME+'_'+tag+u'词云.png')

下图是解析出来的词云,可以看到朋友圈的人大部分还是以自己努力生活为目标~

同理,我也爬取了一下朋友圈的城市分布,发现大部分的人都在北京,还有上过学的哈尔滨,南京的同事~

结论

微信还有很多很好玩的信息可以提取,等下一篇有时间可以继续优化这段代码,github地址如下:

https://github.com/ablo120/PythonLearn.git

附录

import itchat

导入爬取微信记录的包

import re

导入python中的正则表达式(re模块)

import io

导入文件读取的包

import matplotlib.pyplot as plt

导入柱状图绘制的包

import jieba

jieba(结巴)是一个强大的分词库,完美支持中文分词

python爬取手机微信_Python爬取微信好友相关推荐

  1. python背景怎么自定义铃声_python爬取手机铃声

    相信每个人都会给自己的手机调一个好听的音乐作为铃声,但是对于iphone用户来说换铃声一般都会去找第三方平台来进行更换,众多平台当中不得不说的就是爱思手机助手,今天我将带你通过python爬虫来批量进 ...

  2. python公众号留言功能_Python 爬取公众号文章、评论

    前段时间有个爬取公众号评论小需求,花了几天查了不少资料,实现方案有好几种,最后其中一种得以实现.参考 [Python爬虫]微信公众号历史文章和文章评论API分析 . 本人是 Python 小白,会忽略 ...

  3. python 柱状图上显示字体_Python爬取百部电影数据,我发现了这个惊人真相!

    2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%:国产电影总票房411.75亿元,同比增长8.65%,市场占比 ...

  4. python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?

    开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...

  5. python开源代码百度盘_python爬取百度云网盘资源-源码

    今天测试用了一下python爬取百度云网盘资源. 代码片段import urllib import urllib.request import webbrowser import re def yun ...

  6. python爬取动态网页_python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  7. python爬关键词百度指数_Python 抓取指定关键词的百度指数

    百度指数很多时候在我们做项目的时候会很有帮助,从搜索引擎的流量端给到我们一些帮助,比如:家具行业的销量跟"装修","新房","二手房"等关键 ...

  8. python对接企业微信_Python对接企业微信会话内容存档功能的实践

    背景 企业微信会话内容存档,是一项面对金融行业的开放的监管功能,其他行业可以找企业微信官方服务商[1]向腾讯申请审批开通.会话存档的推出是企业微信为了让企业可以了解员工与客户的互动情况,也为了避免员工 ...

  9. python标签整理 微信_Python实现清理微信僵尸粉功能示例【基于itchat模块】

    本文实例讲述了Python实现清理微信僵尸粉功能.分享给大家供大家参考,具体如下: 原理 通过Pyhton调用itchat模块登录网页版微信,给你所有好友发送特殊符号,对方收不到这个特殊符号,只要有人 ...

最新文章

  1. 【算法导论】【ACM】归并排序总结
  2. android ui动画效果怎么做,AndroidUI 布局动画-为列表添加布局动画效果
  3. spring bean scope作用域及多线程安全问题场景分析
  4. Oracle启动和停止的方式详解
  5. shiro-权限概述
  6. UE3 MemLeakCheck Tracking(内存泄露检测追踪)
  7. 90后占六成 花小猪如何吸引年轻人又安全不减配?
  8. oracle排序后第一条,Oracle排序取第一条数据
  9. OC语言——————表视图
  10. 【多目标优化求解】基于matlab金鹰算法求解多目标优化问题【含Matlab源码 188期】
  11. SpringBoot中接口跨域问题
  12. 电子邮件收发原理和JavaMail开发
  13. 《面试》游戏开发常用面试问题以及答案
  14. 一个商品SKU是怎么生成的
  15. 放大器的频率特性(2)-- 共源极的频率特性
  16. 网鼎杯2020 玄武组部分writeup
  17. zigbee抓包实验过程
  18. 2023手把手教你视频剪辑,学会后不用担心不会剪辑了,不用真人露脸!
  19. 美国习惯用语flip out的中英文翻译解释和例子
  20. SPA 中前端路由基本原理与实现方式

热门文章

  1. [存]MySpace兴衰沉浮启示录:方向混乱 技术欠债多
  2. 最新Mysql 8.0.27安装指南
  3. hive join 时的bug,使用left join 可以规避
  4. 从0到1,搭建离线下载器
  5. 各版本pytorch离线下载网址
  6. AnnotationAttributes
  7. 用python庆祝生日_孩子周岁生日如何庆祝才圆满?不想留遗憾的家长,多数选择这样...
  8. 华侨大学计算机学院考研成绩,华侨大学计算机科学与技术学院2019年硕士研究生复试成绩(非全日制,第三批)...
  9. vue自定义百度地图弹窗
  10. css实现页面底部置底(转载)