python爬虫实战---微信好友的获取

本次主要对微信好友的信息获取,包括微信备注名称、省份、城市、个性签名、性别,对其中的个性签名就行词云的制作和对性别的统计。由于微信好友城市分布不多,主要都是集中在一个地区,所以就做地区分布图也没有什么意义;数据存储到mysql当中。

导入包

from wxpy import Bot---微信机器人

from PIL import Image---图片处理

from wordcloud import WordCloud---词云制作

import pygal---条形图制作

import numpy---格式转换

import  jieba---分词处理

import pymysql---数据库操作

import re---正则表达式


 wxpy的使用

https://wxpy.readthedocs.io/zh/latest/这是wxpy的使用文档,可以从里面知道如何去使用,这里就不多说了,下面直接上代码说话。

获取好友信息

在好友的性别sex信息中,sex的值有两个,为1的时候是男性,为2的时候是女性,其他没有备注性别的,我们这里定义为‘None’。

# 获取好友信息
def get_friends():
	# 初始化机器人并获取朋友列表
	friends=Bot().friends()
	# print(friends)
	sex=''
	for friend in friends[1:]:
		# print(friend)
		# print(friend.name+','+friend.province+','+friend.city+','+friend.signature+','+str(friend.sex))
		if friend.sex==1:
			# 男性
			sex='男' 
		elif friend.sex==2:
			# 女性
			sex='女'
		else:
			# 未知
			sex='None'
		yield{ 
		# 备注名称
		'name':friend.name,
		# 省份
		'province':friend.province,
		# 城市
		'city':friend.city,
		# 个性签名
		'signature':friend.signature,
		# 性别
		'sex':sex
		}

 数据存储

把数据存储到mysql中去,数据库中表的字段有:name、province、city、signature、sex。由于备注名和个性签名中带有表情emoji,所以存储的时候会出现错误。因为这边的mysql的存储数据格式的字符集是utf8,校对规则为utf8_general_ci,无法储存4个字节的表情,所以就其中的字段name和signature的字符集做了转换,转换为utf8mb4_unicode_ci。

windows下的数据库操作

命令行连接数据库:mysql -h 主机地址 -u用户名  -p,回车输入密码。

选择数据:use  数据库名称

修改字段的charset: ALTER TABLE `table_name` MODIFY `column_name` VARCHAR(50) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 数据存储
def save_sql(contents):
	# 连接数据库
	conn=pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='mysql',port=3306,charset='utf8mb4')
	# 设置游标
	cur=conn.cursor()
	# 选择数据库
	cur.execute(' USE db_wxpy')
	i=0
	for friend in contents:
		i+=1
		try:
		# 插入数据
			cur.execute('insert into friends values(%s,%s,%s,%s,%s)',(friend['name'],friend['province'],friend['city'],friend['signature'],friend['sex']))
		except Exception as e:
			print(e)
			pass
	conn.commit()
	cur.close()
	conn.close()
	# 微信好友统计
	print(str(i))

数据读取 

# 数据读取
def read_sql(column):
	# 连接数据库
	conn=pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='mysql',port=3306,charset='utf8')
	# 设置游标
	cur=conn.cursor()
	cur.execute('USE db_wxpy')
	cur.execute('select '+column+' from friends')
	# 返回元组
	column_msgs=cur.fetchall()
	cur.close()
	conn.close()
	return column_msgs

词云制作 

def signature_wordcloud(signature_msgs):
	str=''
	signature_msgs=list(signature_msgs)
	# 去除空的个性签名
	while ('',) in signature_msgs:
		signature_msgs.remove(('',))
	for signature_msg in signature_msgs:
		# 字符串拼接
		str+=signature_msg[0]
	# 去除<span class="emoji emoji1f63d"></span><span class="emoji emoji1f63d">标签和换行符
	while True:
		if str:
			result=re.search('<span .*?/span>|\n',str)
			if result:
				str=str.replace(result.group(),'')
			else:
				break
		else:
			print('为空')
			break
	str=jieba.cut(str)
	str=''.join(str)
	# 打开图片
	image_arry=numpy.array(Image.open('wood_man.jpg'))
	wc=WordCloud(font_path='C:/Windows/Fonts/simsun.ttc',background_color='white',width=554,height=446,mask=image_arry)
	wc.generate(str)
	wc.to_file('wood.jpg')

性别统计 

# 性别统计
def count_sex(sex):
	gender=read_sql(sex)
	gender_lists=list(gender)
	male,female,other=0,0,0
	for gender_list in gender_lists:
		if gender_list[0] =='男':
			male+=1
		elif gender_list[0] =='女':
			female+=1;
		else:
			other+=1

	bar=pygal.Bar()
	bar.title='男女比例'
	bar.x_labels=['男','女','其他']
	number=[]
	number.append(male)
	number.append(female)
	number.append(other)
	bar.add('',number)
	# print(number)
	bar.render_to_file('男女比例.svg')

 完整代码:链接:https://pan.baidu.com/s/110Nw11sEC2RdzwELiRVogg 密码:3740

 

猜你喜欢

转载自blog.csdn.net/weixin_36605200/article/details/82501446