如何使用正则表达式进行QQ校友的数据采集
QQ校友里面很多数据是按照学校进行归类的,因此,我们只要知道学校的名称,根据一些条件就可以查找您感兴趣的校友了。
QQ校友的数据查看或者查询,是需要登录才行的,QQ校友的登录,可以让用户通过输入验证码方式进行登录。博客已经有很多大牛找出很多解决方法,在此不说这块,我们这里介绍下,如何分析页面,合理使用正则表达式,获取所需要的数据。
通过抓包工具IE Http Analyzer 可以跟踪到QQ校友的资料查询URL地址类似下面的格式:
在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">
< div class ="list_info" >
< p class ="user_info" >< a href ="/index.php?mod=profile&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&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&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" > 生 日: </ span >< span > 1978年12月27日 </ span ></ p >
< p >< span class ="c_tx2" > 星 座: </ 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&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集合中,然后每个项目再进行一次正则表达式的匹配,获取到具体的内容。
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="(.*?)".*?&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校友的数据采集相关推荐
- php+正则匹配qq,正则表达式对qq号进行验证的实例
这篇文章主要介绍了正则表达式对qq号码进行校验的相关知识,非常不错,具有参考借鉴价值,需要的的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示:package 正则表达式; /*对QQ ...
- 仿QQ校友DIV模拟窗口
最近有一个学生信息平台要做,估计也将成为我的毕业设计.打算做成和QQ校友一样,于是便开始了一系列的模仿. 既然是要提高用户体验,ajax当然必不可少,div模拟窗口也是必不可少的了,这次我还是拿那个j ...
- java qq验证_JAVA正则表达式校验qq号码的方法
导读 正文 Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 正则表达式实例 一个字符串其 ...
- 正则表达式训练-QQ号校验
7-1 正则表达式训练-QQ号校验 分数 5 作者 段喜龙 单位 南昌航空大学 校验键盘输入的 QQ 号是否合格,判定合格的条件如下: 要求必须是 5-15 位: 0 不能开头: 必须都是数字: 输入 ...
- php正则判断是否为QQ号,正则表达式对qq号码校验
正则表达式对qq号码校验 废话不多说了,直接给大家贴代码了,具体代码如下所示: package 正则表达式; /*对QQ号码进行校验 要求5~15位,不能以0开头,只能是数字*/ import jav ...
- 说说QQ校友与校内网的优势
最近发现QQ也在搞校友(很早以前就有了?我OUT了),联想到开心网,校内网,Facebook,他们都属于社交网络的范畴,当然现在的Twitter也很火. 试用了下,我们可以发现他们火的原因. 校内网 ...
- 正则表达式对qq号码进行校验
package 正则表达式; /*对QQ号码进行校验 要求5~15位,不能以0开头,只能是数字*/ import java.util.regex.Matcher; import java.util.r ...
- 运用正则表达式匹配QQ邮箱
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.首先创建一个新文件夹 1.命名好名字后用Visu ...
- 论腾讯QQ校友的生存空间
腾讯公司-中国即时通讯的龙头老大,最近推出了个QQ校友产品,对于这个IT霸主的动作,总会引起很多人的关注.因此,在第一时间里,我便通过各种途径试用了QQ校友这个产品,感受可以两个字来形容:失望! 为何 ...
最新文章
- 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )
- Cannot open the disk 'E:/vmware/Ubuntu.vmdk' or one of the snapshot disks it depends on. 解决方法
- iOS 关于枚举的使用
- [leetcode] 144. 二叉树的前序遍历
- python 数据流中的移动平均值_剑指Offer-41-数据流中的中位数
- python2转python3代码_2to3 - 自动将 Python 2 代码转为 Python 3 代码
- 推荐一个比吴恩达的还要优质的机器学习课程
- dp(0,1背包)-----高数Umaru系列(9)——哈士奇
- 安卓 VNET 抓取 wskey 教程
- excel加密文档破解
- PB云存储系统问世 解决数据中心能耗问题
- 字节跳动2023届校招薪资盘点!
- bugku_crypto_这不是摩斯密码
- 2023程序员今年的一些现状
- arcgis 同名图层合并_arcgis合并多个图层
- Android+webService的连接
- 177本名著浓缩成了177句话!别等自己做错时才明白
- 猫盘用服务器硬盘,猫盘硬盘数据的转移具体方法步骤
- TIOBE 5 月最新编程语言排行榜
- C语言malloc初始化问题
热门文章
- 服务器网站访问ftp设置,服务器网站访问ftp设置方法
- C# Linq基本操作以及into、let关键字
- 块元素和行内元素及其元素转换
- Linux下RPM软件包的安装及卸载
- 《微信小程序开发》 页面导航最强详解 | 如何对小程序页面进行跳转?
- Spartacus gods of the arena,鲜血与情色的罗马史诗
- php幻灯片的插件,jQuery幻灯片插件Flickerplate
- Prometheus===》普罗米修斯容器化监控、PromQL的使用、Grafana添加普罗米修斯数据源模板
- 关于火狐firefox不能启动解决方法
- Reactor模式与NIO