爬虫实战:学者网(一)

来源:互联网 发布:杭州淘宝拍摄公司 编辑:程序博客网 时间:2024/06/06 09:21

学者网是广东省服务计算工程技术研究开发中心(华南师范大学计算机学院汤庸团队)开发的学术社交网站,类似于谷歌学者。目标群体主要是高校学者。因此该网站用户定位十分精确。从价值上,个人信息价值高,主要有姓名单位邮箱等,如下图。

image.png

    本着学习的目的,我编写了一套简单的程序对该网站进行数据抓取。本次爬虫项目分三个步骤:一、网站分析;二、程序设计。

    另外免责声明:本文所有方法与代码与正常web浏览模式一致,不涉及侵犯任何计算机系统;本文爬到的数据皆为网页公开数据不涉及任何隐私;本文方法代码完全公开,请仅作学习使用,其余用途与本文作者无关。



网站分析:

1,如何迭代

    对于爬虫程序,首要的问题是如何源源不断的获取需要的信息的URL。我们分析学者网的URL可以发现不同用户的主页链接是由“网站地址”+“用户ID”构成的,要遍历网站用户,即需要遍历用户ID。

image.png

    如果单单是数字ID可以采取暴力遍历的方法,但在这里,用户ID是字母和数字构成,不可能遍历完。因此在这里我要想得到用户ID,第一时间想到的是SQL注入拿库,但是这是非法的不可取。我又想起了一句话“世界上任何两个人之间只隔着六个人”,这叫六度空间理论。那么是否可以

从一个人出发遍历到所有的人。

    其实不可能的,有两种情况的遍历不到:

    1如果一个人注册后完全不加好友,和其他人没有链接,这种人属于“僵尸号”,无法被遍历到,如下图右上角用户。

    2封闭小圈子无法被遍历,比如ABC三人互相加好友,但是不加其他人,也无法遍历到,如下图左上角。

    image.png

    我们只能遍历一个主连通图。那么如何遍历,可以发现每个人主页中有“圈子”这个栏目,打开后直接可见它所有的好友。

image.png



打开firefox看network项目,发现点开圈子时,有image.png文件下载,打开即为我们需要的信息,json格式。如下图:

image.png

查看header发现传入的参数为当前用户ID

image.png

到这里,遍历网站就可以实现了:从用户ID出发不断取得其他用户ID,进行图的深度遍历。



2抓取数据

在前面的json中包含了中文名,ID,头像链接。那么主页中还有其他的信息,例如工作单位,邮箱等。

大多数数据直接可提取,但是用户邮箱该网站作了简单的防提取:

image.png

可以看到首先使用了js生成,其次加入了很多混淆信息。然而虽然使用js但数据并非动态从数据库提取,还是静态的传输过来了。其次这种固定的混淆对于正则表达式完全无效。我们只需要用正则定位image.pngimage.png即可拼凑正确邮箱地址。



到此我们实现了数据的提取和遍历的方式,那么网站的分析就到这里,下一篇是代码的实现。

本人博客http://blog.lishiqi.org

原创粉丝点击