本项目已经上传到github上面:https://github.com/wangqifan/WeChatAnalyse

这个Demo是利用HttpWebRequest和HttpWebResponse来爬取微信好友列表,讲信息存入数据库,并对信息进行分析,用图标画出来。

如何获得微信好友列表信息

首先前往https://wx.qq.com/登录自己的微信账号,打开浏览器的开发者控制台

获取微信好友列表

微信给后台发送了几十个请求,我翻遍了所有请求,终于找到了想要的url

借助浏览器我们可以获取这个请求的信息

微信好友列表获取

我们可以把这个数据交给程序让程序帮我们取请求,并把数据保存下来

前期准备新建一个名为WeChatAnalyse的项目

获取微信好友列表

借助nuget安装Entity Framwork和Json.net我们待会要使用这两个框架,顺便修改下配置文件

<connectionStrings><add name="WeChartContex" connectionString="server=.;database=WeChat;uid=sa;pwd=000000"providerName="System.Data.SqlClient" /></connectionStrings>

创建model

我们再次回到浏览器控制台,分析服务器返回的数据

微信好友列表获取

根据返回数据,我们可以建类 Friend

[Key]public int Id { get; set; }public int Uin { get; set; }public string UserName { get; set; }public string NickName { get; set; }public string HeadImgUrl { get; set; }public int ContactFlag { get; set; }public int MemberCount { get; set; }public List<Friend> MemberList { get; set; }public string RemarkName { get; set; }public int HideInputBarFlag { get; set; }public int Sex { get; set; }public string Signature { get; set; }public int VerifyFlag { get; set; }public int OwnerUin { get; set; }public string PYInitial { get; set; }public string PYQuanPin { get; set; }public int StarFriend { get; set; }public int AppAccountFlag { get; set; }public int Statues { get; set; }public int AttrStatus { get; set; }public string Province { get; set; }public string City { get; set; }public string Alias { get; set; }public int SnsFlag { get; set; }public int UniFriend { get; set; }public string DisplayName { get; set; }public int ChatRoomId { get; set; }public string KeyWord { get; set; }public string EncryChatRoomId { get; set; }

类BaseResponse

public class BaseResponse{//"Ret": 0, "ErrMsg": ""public int Ret { get; set; }public string ErrMsg { get; set; }}

类Respone

public class Respone{public BaseResponse respoen { get; set; }public int MemberCount { get; set; }public List<Friend> MemberList { get; set; }}

创建数据库上下文

public class WeChartContex:DbContext{public    DbSet<Friend> Fridens { get; set; }}

创建控制器Sprider

给他添加一个数据库上下文对象

WeChartContex context = new WeChartContex();

这种强耦合的代码是不被推荐的,由于我们的Demo特别小,这里暂时这样写

public ActionResult GetFridendInformation(){HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1480564845349&seq=0&skey=@crypt_20089e09_d38ecc170f273d2db91833e793677276");request.Method = "get";request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0";request.Referer = "https://wx.qq.com/";// CookieContainer contain = new CookieContainer();request.Headers.Add("Cookie", "pgv_pvi=1499432960; pt2gguin=o1694675518; RK=; /=s7972417536; wxsid=tjF6UrJ2RcvNH76H; wxloadtime=1480564533_expired);using(Stream dataStream = response.GetResponseStream()){using( StreamReader reader = new StreamReader(dataStream)){// Read the content.string responseFromServer = reader.ReadToEnd();Respone   responsefronserver = JsonHelper.DeserializeToObject<Respone>(responseFromServer);foreach (var item in responsefronserver.MemberList){if(item.VerifyFlag==0) context.Fridens.Add(item);} }}request.Abort();
if (context.SaveChanges()>0) { return Content("ok"); }return Content("fail");}

基本思路是根据URL来创建一个HttpWebRequest对象,它是用http协议来请求的,我们来设置UserAgent,cookie,这里的cookie我做了删除,cookie应该即时取浏览器提取,保证它是新鲜的

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1480564845349&seq=0&skey=@crypt_20089e09_d38ecc170f273d2db91833e793677276");request.Method = "get";request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0";request.Referer = "https://wx.qq.com/";request.Headers.Add("Cookie", "pgv_pvi=149943")

接下来创建HttpWebResponse对象来获取数据,并进行反序列化

首先创建一个jsonhelp

public class JsonHelper{/// <summary>/// 对数据进行序列化/// </summary>/// <param name="value"></param>/// <returns></returns>public static string SerializeToString(object value){return JsonConvert.SerializeObject(value);}/// <summary>/// 反序列化操作/// </summary>/// <typeparam name="T"></typeparam>/// <param name="str"></param>/// <returns></returns>public static T DeserializeToObject<T>(string str){return JsonConvert.DeserializeObject<T>(str);}
}

接下来对返回的数据进行反序列化

HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream dataStream = response.GetResponseStream();StreamReader reader = new StreamReader(dataStream);// Read the content.string responseFromServer = reader.ReadToEnd();Respone   responsefronserver = JsonHelper.DeserializeToObject<Respone>(responseFromServer);

接下来保存到数据库中,我们只要朋友的信息

foreach (var item in responsefronserver.MemberList){if(item.VerifyFlag==0) context.Fridens.Add(item);} if (context.SaveChanges()>0){return Content("ok");}return Content("fail");

VerifyFlag为0就是个人账号,公众号不为0

运行程序,进入Sprider/GetFridendInformation,返回OK执行成功

微信好友列表获取

我一共有116个微信好友。这样就用爬虫实现:获取微信好友列表爬取进行好友分析。

更多关于微信好友列表获取交流可加q群:753876674  一起交流学习。

爬虫实现:获取微信好友列表爬取进行好友分析相关推荐

  1. python爬虫入门——QQ音乐歌手照片及歌曲列表爬取

    #刚入门,大佬莫入 #程序功能:输入歌手名称后,程序会生成一个Word文件,Word文件里包括歌手名称.照片和所有歌曲列表! import requests, time import math fro ...

  2. python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

    原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...

  3. python 扒数据_不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  4. Python爬虫《自动化学报》数据爬取与数据分析

    Python爬虫<自动化学报>数据爬取与数据分析 文章目录 Python爬虫<自动化学报>数据爬取与数据分析 前言 一.代码 二.结果展示 三.爬虫实现 1.准备 2.获取网页 ...

  5. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

  6. [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱

    本文改自 [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱 之前写的爬虫单子,代码已经跑了快3个月了,后续又增加了一些需求,修改了一些小bug ...

  7. 边学边敲边记之爬虫系列(八):Scrapy系统爬取伯乐在线

    一.前言 上一篇边学边敲边记爬虫系列七给大家仔细讲解了如何用Xpath分类爬取医疗信息网站医疗器材名称和介绍图片,以及三种最常用的存储方法. 本篇是本系列的第八篇了,今天给大家讲讲如何用Scrapy分 ...

  8. 爬虫实例(re解析):爬取电影排行榜(含全部代码)

    爬虫实例(re解析):爬取电影排行榜 在爬虫之前明确自己的步骤: 一.获取要爬取的网页的源代码(会用到requests库) 二.通过正则解析提取想要的有效信息(要用到re) 三.保存数据(csv) 找 ...

  9. Scrapy-redis 分布式爬虫-成都安居客二手房数据爬取

    Joint-spider 项目地址:GitHub Scrapy-Redis 架构: 成都贝壳,安居客房源信息爬虫 基于 python 分布式房源数据爬取系统,为房价数据挖掘及可视化提供数据支持.采用 ...

最新文章

  1. linux 程序包 permission denied,Linux 执行程序 报错误:Permission denied.
  2. 一份可以让 Python 变得更快的工具清单
  3. python写web难受-用python写脚本此页面上造成web运行速度减慢
  4. 【PAT乙级】1057 数零壹 (20 分)
  5. StringBuilder的构造方法和append方法
  6. 如何开发一个hexo主题_如何确定一个强烈的主题可以使产品开发更有效
  7. 求方程的解 Solve the Equation
  8. linux nginx 配置端口访问,Linux入门教程:ubuntu 16.04配置nginx服务器实现一个IP一个端口多个站点,ubuntunginxNginx 使用异步...
  9. USACO12FEB Nearby Cows
  10. 搞定面试官:咱们从头到尾再说一次 Java 垃圾回收
  11. dm数据库 linux版下载,linux环境搭建DM数据库
  12. mysql在linux下备份还原,Linux下MySQL的备份与还原
  13. 联系实际谈谈管理者的沟通协调能力建设
  14. python爬虫从入门到放弃-python爬虫从入门到放弃(二)- 爬虫的深层原理
  15. atitit.提升研发管理的利器---重型框架 框架 类库的区别
  16. Itext 中的文本信息绝对定位
  17. poster模板_高分北斗大赛报名进行中,ppt、poster展示模板推送
  18. MD5的认识,建议所有菜菜都看下
  19. 2020大学生就业报告:IT行业人才缺口巨大,好就业
  20. python读文件-read_csv()-常用参数

热门文章

  1. Javascript邮箱正则表达式
  2. 安卓-实现阴影的几种方式
  3. 东华oj1-求长方形的面积和周长C++
  4. 设计模式之模板方法模式(TemplateMethod)
  5. 0基础想要快速的学好3D建模,理清思路,对症下药!
  6. 2022-2028全球与中国食品级润滑油和润滑脂市场现状及未来发展趋势
  7. 在windows media player 视频上加载字幕
  8. Flash图片的内存计算公式
  9. 花之语第十六期:凤凰木
  10. UI设计灵感|App的登录注册页面案例参考