QQ校友里面很多数据是按照学校进行归类的,因此,我们只要知道学校的名称,根据一些条件就可以查找您感兴趣的校友了。

QQ校友的数据查看或者查询,是需要登录才行的,QQ校友的登录,可以让用户通过输入验证码方式进行登录。博客已经有很多大牛找出很多解决方法,在此不说这块,我们这里介绍下,如何分析页面,合理使用正则表达式,获取所需要的数据。

通过抓包工具IE Http Analyzer 可以跟踪到QQ校友的资料查询URL地址类似下面的格式:

http://xiaoyou.qq.com/index.php?mod=search &act =result &name =%E7%8E%8B &schooltype =3 &slevel =GF &sname =%E8%A5%BF%E5%8D%97%E4%BA%A4%E5%A4%A7 &sid =12229 &deptname = &deptid =0 &syear =1997 &sex =0 &age =-1 &year =0 &month =0 &day =0 &astro =0 &homeprov =0 &homecity =0 &nowprov =0 &nowcity =0

在Google浏览器上,你看到的中文地址信息是:

http://xiaoyou.qq.com/index.php?mod=search&act=result&name=%E7%8E%8B&schooltype=3&slevel=GF&sname=%E8%A5%BF%E5%8D%97%E4%BA%A4%E5%A4%A7&sid=12229&deptname=&deptid=0&syear=1997&sex=0&age=-1&year=0&month=0&day=0&astro=0&homeprov=0&homecity=0&nowprov=0&nowcity=0

如果你登陆后,执行这个页面,你就可以看到的部分页面源码是如下所示(我截取了关心的那部分HTML代码):

<ul class="results_list">

<li class="request_one">

                     < a  href ="/index.php?mod=profile&amp;u=c265e4bd629300c500a439a57fc4b1c6d2458796fbfe9608"  class ="pic_user_m xy_card" >< span  class ="skin_portrait_round" ></ span >< img  src ="http://xy.store.qq.com/c265e4bd629300c500a439a57fc4b1c6d2458796fbfe96080"  alt ="王明灵"   /></ a >  
                     < div  class ="list_info" >  
                         < p  class ="user_info" >< a  href ="/index.php?mod=profile&amp;u=c265e4bd629300c500a439a57fc4b1c6d2458796fbfe9608"  class ="user_name xy_card" > 王*** </ a >   </ p >                         西南交大
                     </ div >  
                     < ul >  
                         < li >< img  src ="http://imgcache.qq.com/campus_v2/ac/b.gif"  alt =""  class ="icon_script"   />< a  href ="javascript:is_sendscrip('c265e4bd629300c500a439a57fc4b1c6d2458796fbfe9608');" > 发小纸条 </ a ></ li >  
                         < li >< img  src ="http://imgcache.qq.com/campus_v2/ac/b.gif"  alt =""  class ="icon_add"   />< a  href ="javascript:void(0)"  onclick ="add_friends_frame('c265e4bd629300c500a439a57fc4b1c6d2458796fbfe9608')" > 加为好友 </ a ></ li >  
                     </ ul >  
                 </ li >                    < li  class ="request_one" >  
                     < a  href ="/index.php?mod=profile&amp;u=c265e4bd629300c5202a08ff05052aadd58b7e634ad8d204"  class ="pic_user_m xy_card" >< span  class ="skin_portrait_round" ></ span >< img  src ="http://xy6.store.qq.com/c265e4bd629300c5202a08ff05052aadd58b7e634ad8d2040"  alt ="王*霞"   /></ a >  
                     < div  class ="list_info" >  
                         < p  class ="user_info" >< a  href ="/index.php?mod=profile&amp;u=c265e4bd629300c5202a08ff05052aadd58b7e634ad8d204"  class ="user_name xy_card" > 王*霞 </ a >   </ p >                         北京理工大学
                     </ div >  

其实我们需要把里面:用户编号、姓名、学校,然后我们根据用户编号就可以进一步获取该用户的信息了。

用户详细的介绍内容页面地址是:http://xiaoyou.qq.com/index.php?mod=profile&u=c265e4bd629300c500a439a57fc4b1c6d2458796fbfe9608

然后我们看到,这个页面的源码是:

<div class="fun_info_class">

             < p >< span  class ="c_tx2" > 性 &nbsp;&nbsp;&nbsp;&nbsp; 别: &nbsp; </ span >< span > 女 </ span ></ p >              
             < p >< span  class ="c_tx2" > 生 &nbsp;&nbsp;&nbsp;&nbsp; 日: &nbsp; </ span >< span > 1978年12月27日 </ span ></ p >  
             < p >< span  class ="c_tx2" > 星 &nbsp;&nbsp;&nbsp;&nbsp; 座: &nbsp; </ span >< span > 魔羯座 </ span ></ p >           
             < p >< span  class ="c_tx2" > 上次登录: </ span >   < span > 1天前(共10次) </ span ></ p >  
             < div  class ="list_sch_wrap" >< p >< span  class ="c_tx2" > 就读学校: </ span ></ p >< ul  class ="list_sch" >< li >< a  href ="/index.php?mod=school&act=schoolportal&amp;school_id=12229" > 西南交大 </ a ></ li ></ ul ></ div >  
         </ div >  

这个也页面里面有性别、生日、星座、上次登录时间等相关信息,这样基本上就构成了完整的用户信息了。

好了,大的方面我们知道了,看看具体如何把页面里面的信息提取出来。

第一步,把页面内容分离,获取感兴趣的部分,正则表达式是:<li\s+?class="request_one"\>\s*(.*?)\s*<ul\>

其中表达式\s的意思如下:

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

\s+? 标识有一个到多个空白字符

(.*?) 标识非贪婪模式匹配任何字符

我们看到正则表达式工具中得到的结果是: 

其中每项都列出来了,我们把它放到一个List集合中,然后每个项目再进行一次正则表达式的匹配,获取到具体的内容。

                  #region  获得各项列表字符串

List < string >  itemHtmlList  =   new  List < string > ();
                 string  itemRegex  =   " 刚才的正则表达式 " ; // <li\s+?class="request_one"\>\s*(.*?)\s*<ul\>

Regex re  =   new  Regex(itemRegex, RegexOptions.IgnoreCase  |  RegexOptions.Singleline  |  RegexOptions.IgnorePatternWhitespace);

Match mc  =  re.Match(content);
                 if  (mc.Success)
                {
                    MatchCollection mcs  =  re.Matches(content);
                     foreach  (Match me  in  mcs)
                    {
                         string  strValue  =  me.Groups[ 1 ].Value;
                        itemHtmlList.Add(strValue);
                    }
                }
                 #endregion

上图中黑色背景下面的部分,就是我们每项要解析的内容。

然后我们再使用正则表达式:<a\s+?href="(.*?)".*?src="(.*?)".*?alt="(.*?)".*?&amp;u=(.*?)".*?</p\>\s*(.*?)\s*</div\>

就可以得到下面的效果

其中正则表达式部分字符的意思如下:

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

下面我们要根据用户信息页面,去获取其他的相关信息了,我们用正则表达式:<div\s+?class="fun_info_class"\>.*?</span\>\s*?<span\>(.*?)</span\>.*?</span\>\s*?<span\>(.*?)</span\>.*?</span\>\s*?<span\>(.*?)</span\>.*?</span\>\s*?<span\>(.*?)</span\>.*?</div\>

来过滤代码,就可以了。

整个过程就是这样反复获取,解析,就可以实现对QQ校友数据的采集了。

不过有一点不好,就是QQ校友和用户ID不是QQ号码,并且你找不出和QQ号码有任何关联的地方,这或许就是隐私保护的举措吧。

如果阁下有好的方法,可以获取到关联关系,大家可以探讨一下。

如何使用正则表达式进行QQ校友的数据采集相关推荐

  1. php+正则匹配qq,正则表达式对qq号进行验证的实例

    这篇文章主要介绍了正则表达式对qq号码进行校验的相关知识,非常不错,具有参考借鉴价值,需要的的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示:package 正则表达式; /*对QQ ...

  2. 仿QQ校友DIV模拟窗口

    最近有一个学生信息平台要做,估计也将成为我的毕业设计.打算做成和QQ校友一样,于是便开始了一系列的模仿. 既然是要提高用户体验,ajax当然必不可少,div模拟窗口也是必不可少的了,这次我还是拿那个j ...

  3. java qq验证_JAVA正则表达式校验qq号码的方法

    导读 正文 Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 正则表达式实例 一个字符串其 ...

  4. 正则表达式训练-QQ号校验

    7-1 正则表达式训练-QQ号校验 分数 5 作者 段喜龙 单位 南昌航空大学 校验键盘输入的 QQ 号是否合格,判定合格的条件如下: 要求必须是 5-15 位: 0 不能开头: 必须都是数字: 输入 ...

  5. php正则判断是否为QQ号,正则表达式对qq号码校验

    正则表达式对qq号码校验 废话不多说了,直接给大家贴代码了,具体代码如下所示: package 正则表达式; /*对QQ号码进行校验 要求5~15位,不能以0开头,只能是数字*/ import jav ...

  6. 说说QQ校友与校内网的优势

    最近发现QQ也在搞校友(很早以前就有了?我OUT了),联想到开心网,校内网,Facebook,他们都属于社交网络的范畴,当然现在的Twitter也很火. 试用了下,我们可以发现他们火的原因. 校内网 ...

  7. 正则表达式对qq号码进行校验

    package 正则表达式; /*对QQ号码进行校验 要求5~15位,不能以0开头,只能是数字*/ import java.util.regex.Matcher; import java.util.r ...

  8. 运用正则表达式匹配QQ邮箱

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.首先创建一个新文件夹 1.命名好名字后用Visu ...

  9. 论腾讯QQ校友的生存空间

    腾讯公司-中国即时通讯的龙头老大,最近推出了个QQ校友产品,对于这个IT霸主的动作,总会引起很多人的关注.因此,在第一时间里,我便通过各种途径试用了QQ校友这个产品,感受可以两个字来形容:失望! 为何 ...

最新文章

  1. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )
  2. Cannot open the disk 'E:/vmware/Ubuntu.vmdk' or one of the snapshot disks it depends on. 解决方法
  3. iOS 关于枚举的使用
  4. [leetcode] 144. 二叉树的前序遍历
  5. python 数据流中的移动平均值_剑指Offer-41-数据流中的中位数
  6. python2转python3代码_2to3 - 自动将 Python 2 代码转为 Python 3 代码
  7. 推荐一个比吴恩达的还要优质的机器学习课程
  8. dp(0,1背包)-----高数Umaru系列(9)——哈士奇
  9. 安卓 VNET 抓取 wskey 教程
  10. excel加密文档破解
  11. PB云存储系统问世 解决数据中心能耗问题
  12. 字节跳动2023届校招薪资盘点!
  13. bugku_crypto_这不是摩斯密码
  14. 2023程序员今年的一些现状
  15. arcgis 同名图层合并_arcgis合并多个图层
  16. Android+webService的连接
  17. 177本名著浓缩成了177句话!别等自己做错时才明白
  18. 猫盘用服务器硬盘,猫盘硬盘数据的转移具体方法步骤
  19. TIOBE 5 月最新编程语言排行榜
  20. C语言malloc初始化问题

热门文章

  1. 服务器网站访问ftp设置,服务器网站访问ftp设置方法
  2. C# Linq基本操作以及into、let关键字
  3. 块元素和行内元素及其元素转换
  4. Linux下RPM软件包的安装及卸载
  5. 《微信小程序开发》 页面导航最强详解 | 如何对小程序页面进行跳转?
  6. Spartacus gods of the arena,鲜血与情色的罗马史诗
  7. php幻灯片的插件,jQuery幻灯片插件Flickerplate
  8. Prometheus===》普罗米修斯容器化监控、PromQL的使用、Grafana添加普罗米修斯数据源模板
  9. 关于火狐firefox不能启动解决方法
  10. Reactor模式与NIO