爬虫实现:获取微信好友列表爬取进行好友分析
本项目已经上传到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 一起交流学习。
爬虫实现:获取微信好友列表爬取进行好友分析相关推荐
- python爬虫入门——QQ音乐歌手照片及歌曲列表爬取
#刚入门,大佬莫入 #程序功能:输入歌手名称后,程序会生成一个Word文件,Word文件里包括歌手名称.照片和所有歌曲列表! import requests, time import math fro ...
- python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...
原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...
- python 扒数据_不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据
Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...
- Python爬虫《自动化学报》数据爬取与数据分析
Python爬虫<自动化学报>数据爬取与数据分析 文章目录 Python爬虫<自动化学报>数据爬取与数据分析 前言 一.代码 二.结果展示 三.爬虫实现 1.准备 2.获取网页 ...
- Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB
通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...
- [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱
本文改自 [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱 之前写的爬虫单子,代码已经跑了快3个月了,后续又增加了一些需求,修改了一些小bug ...
- 边学边敲边记之爬虫系列(八):Scrapy系统爬取伯乐在线
一.前言 上一篇边学边敲边记爬虫系列七给大家仔细讲解了如何用Xpath分类爬取医疗信息网站医疗器材名称和介绍图片,以及三种最常用的存储方法. 本篇是本系列的第八篇了,今天给大家讲讲如何用Scrapy分 ...
- 爬虫实例(re解析):爬取电影排行榜(含全部代码)
爬虫实例(re解析):爬取电影排行榜 在爬虫之前明确自己的步骤: 一.获取要爬取的网页的源代码(会用到requests库) 二.通过正则解析提取想要的有效信息(要用到re) 三.保存数据(csv) 找 ...
- Scrapy-redis 分布式爬虫-成都安居客二手房数据爬取
Joint-spider 项目地址:GitHub Scrapy-Redis 架构: 成都贝壳,安居客房源信息爬虫 基于 python 分布式房源数据爬取系统,为房价数据挖掘及可视化提供数据支持.采用 ...
最新文章
- linux 程序包 permission denied,Linux 执行程序 报错误:Permission denied.
- 一份可以让 Python 变得更快的工具清单
- python写web难受-用python写脚本此页面上造成web运行速度减慢
- 【PAT乙级】1057 数零壹 (20 分)
- StringBuilder的构造方法和append方法
- 如何开发一个hexo主题_如何确定一个强烈的主题可以使产品开发更有效
- 求方程的解 Solve the Equation
- linux nginx 配置端口访问,Linux入门教程:ubuntu 16.04配置nginx服务器实现一个IP一个端口多个站点,ubuntunginxNginx 使用异步...
- USACO12FEB Nearby Cows
- 搞定面试官:咱们从头到尾再说一次 Java 垃圾回收
- dm数据库 linux版下载,linux环境搭建DM数据库
- mysql在linux下备份还原,Linux下MySQL的备份与还原
- 联系实际谈谈管理者的沟通协调能力建设
- python爬虫从入门到放弃-python爬虫从入门到放弃(二)- 爬虫的深层原理
- atitit.提升研发管理的利器---重型框架 框架 类库的区别
- Itext 中的文本信息绝对定位
- poster模板_高分北斗大赛报名进行中,ppt、poster展示模板推送
- MD5的认识,建议所有菜菜都看下
- 2020大学生就业报告:IT行业人才缺口巨大,好就业
- python读文件-read_csv()-常用参数