Python爬微信好友头像,性别所在地区(内附python学习资料分享)

基本环境配置

版本:Python3.6

系统:Windows

相关模块:

import requests
import json
from collections import Counter
from pyecharts import Pie
import hashlib

基本的爬虫思路

  • 第一步,获取Url数据
  • 第二步,看看是不是反爬
  • 第三步,取出数据研究类型
  • 第四步 ,筛选数据,统计图表
  • 第五步,图片下载

Python爬微信好友头像,性别所在地区(内附python学习资料分享)

01

获取URL

Python爬微信好友头像,性别所在地区(内附python学习资料分享)

02

是否反爬

headers = {
 'Cookie': ' ~自己的 ',
 'Host': 'wx.qq.com',
 'Upgrade-Insecure-Requests': '1',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'
 }

03

获取数据

Python爬微信好友头像,性别所在地区(内附python学习资料分享)

数据是这样的

dict1 = json.loads(list_data.text)
print("%s: %s" % ("好友数" ,dict1["MemberCount"])) #字典
listdata=dict1["MemberList"] # 集合
 for lists in range(0,dict1["MemberCount"]): # 把全部用户的地址存储
 HeadImgUrls.append(listdata[lists]["HeadImgUrl"])
 sexs.append(listdata[lists]["Sex"])
 Province.append(listdata[lists]["Province"]+""+listdata[lists]["City"])
 rest=Counter(Province) #这里是分组

04

筛选数据,统计图表

pie = Pie("微信好友用户统计:好友%s" %( +dict1["MemberCount"]), title_pos='center',width=1400,height=600)
 pie.add(
 "",
 countProvin,
 Countcity,
 radius=[40, 75],
 label_text_color=None,
 is_label_show=True,
 legend_orient="vertical",
 legend_pos="left",
 )
 pie.render()

Python爬微信好友头像,性别所在地区(内附python学习资料分享)

完整代码

# coding:utf8
import requests
import json
from collections import Counter
from pyecharts import Pie
import hashlib
# 微信Url数据获取连接
Wxurl="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?lang=zh_CN&r=1551517351463&seq=0&skey=@crypt_80cc7620_ac3680d314a5860438086e5d54cf177d"
headers = { 
 Cookie': 'cookie',
 'Host': 'wx.qq.com',
 'Upgrade-Insecure-Requests': '1',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36'
 }
#TODO Province_City 使用到的数组集合
Province = []
Countcity=[]
#TODO 存储性别
sexs=[]
#TODO 存储图片
HeadImgUrls=[]
def SexFun(Sexrests):
 # 性别方法
 print("男%s" % Sexrests[1])
 print("女%s" % Sexrests[2])
 print("公众号%s" % Sexrests[0])
 pie = Pie("微信好友性别统计" , title_pos='center', width=1400, height=600)
 pie.add(
 "",
 ['男','女','未知'],
 [Sexrests[1],Sexrests[2],Sexrests[0]],
 radius=[40, 75],
 title='sex',
 label_text_color=None,
 is_label_show=True,
 legend_orient="vertical",
 legend_pos="left",
 )
 pie.render('sex.html')
 print(Sexrests)
#TODO Wechar_data 方法
def Wechar_data(Wxurl,headers):
 global Province # 转换为全局变量,假如不转换的话,会报错的
 global Countcity
 global sexs
 global HeadImgUrls
 list_data = requests.get(Wxurl,headers=headers)
 list_data.encoding = "utf-8"
 print(list_data.text)
 dict1 = json.loads(list_data.text)
 print("%s: %s" % ("好友数" ,dict1["MemberCount"])) #字典
 listdata=dict1["MemberList"] # 集合
 #print(listdata)
 for lists in range(0,dict1["MemberCount"]): # 把全部用户的地址存储
 HeadImgUrls.append(listdata[lists]["HeadImgUrl"])
 sexs.append(listdata[lists]["Sex"])
 Province.append(listdata[lists]["Province"]+""+listdata[lists]["City"])
 rest=Counter(Province) #这里是分组
 #print(rest)
 """
 Counter({'': 29, '湖南郴州': 21, '湖南长沙': 16, '广东深圳': 14, '广东中山': 9, '广东广州': 8, '北京朝阳': 7, '湖南娄底': 4, '湖南怀化': 4, '北京海淀': 3, '湖南益阳': 3, '上海浦东新区': 3, '安徽合肥': 2, '北京西城': 2, '广东佛山': 2, '广东湛江': 2, '湖南株洲': 2, '浙江杭州': 1, '北京东城': 1, '广东': 1, '四川德阳': 1, '辽宁丹东': 1, '河南三门峡': 1, '湖南张家界': 1, '广东肇庆': 1, '上海长宁': 1, '澳门路环岛': 1, '江苏': 1, '上海': 1, '湖南衡阳': 1, '河南南阳': 1, '湖南永州': 1, '北京': 1, 'North Shore': 1, '湖北恩施': 1, '湖南湘潭': 1, '湖南岳阳': 1, '湖南': 1, 'EnglandSheffield': 1, '湖南邵阳': 1, '湖北武汉': 1, '广东珠海': 1, 'Eastern': 1, '江西南昌': 1, 'SabahSemporna': 1, '四川成都': 1, '北京昌平': 1, '福建宁德': 1})
 """
 sets = set(Province)
 countProvin = list(sets)
 #print(countProvin) #city
 ''' ['', '河南三门峡', '河南南阳', '北京', '广东肇庆', '广东中山', '上海长宁', '湖南长沙', '广东佛山', '福建宁德', '广东深圳', '湖南娄底', '辽宁丹东', '浙江杭州', '湖北恩施', 'North Shore', '湖南', '北京昌平', '上海浦东新区', '澳门路环岛', '湖南株洲', '湖南邵阳', 'SabahSemporna', '广东广州', '湖南张家界', '湖南衡阳', '湖南永州', '湖北武汉', '北京朝阳', '安徽合肥', '北京西城', '湖南岳阳', '广东', '北京东城', '江西南昌', '广东珠海', '四川德阳', '湖南郴州', '湖南益阳', 'EnglandSheffield', '四川成都', '广东湛江', '江苏', '湖南怀化', 'Eastern', '湖南湘潭', '上海', '北京海淀']'''
 #print(en(countProvin))48
 for iii in range(0,len(countProvin)):
 #print(countProvin[iii])
 Countcity.append(rest[countProvin[iii]])
 #print(Countcity) # num list
 try:
 countProvin[0]="暂未填写地区"
 except Exception:
 print("登录授权已过期")
 pie = Pie("微信好友用户统计:好友%s" %( +dict1["MemberCount"]), title_pos='center',width=1400,height=600)
 pie.add(
 "",
 countProvin,
 Countcity,
 radius=[40, 75],
 label_text_color=None,
 is_label_show=True,
 legend_orient="vertical",
 legend_pos="left",
 )
 pie.render()
 #性别判断
 Sexrests = Counter(sexs) # 这里是分组
 #让代码看上去简单一点使用方法封装
 SexFun(Sexrests)
 HeadimgFun(HeadImgUrls,headers)
def HeadimgFun(imgdata,headers):
 #print(imgdata[0])
 md = hashlib.md5() # 构造一个md5
 for i in range(0,len(imgdata)):
 utllist="https://wx.qq.com"+imgdata[i]
 reqs = requests.get(utllist,headers=headers)
 reqs.encoding = "utf-8"
 md.update(imgdata[i].encode())
 imgname=md.hexdigest()+".jpg"
 with open('./images/'+imgname, 'wb') as f:
 f.write(reqs.content)
Wechar_data(Wxurl,headers)
demo

最后,想学习Python的小伙伴们!

请关注+私信回复:“学习”就可以拿到一份我为大家准备的Python学习资料!

Python爬微信好友头像,性别所在地区(内附python学习资料分享)

pytyhon学习资料

Python爬微信好友头像,性别所在地区(内附python学习资料分享)

python学习资料

相关推荐