前言
一开始我打算爬取人人网的数据,因为我想对我的人人网数据做一个备份。然而,后来它误入歧途,最终爬上了朋友网。 (p.s.又成功迷路了)。作为一个严重拖延者,这个爬虫原本是人人网转售时写的,只是把数据爬了回来,让数据静静地躺在家里的树莓派里。
准备
爬取一个网站的数据,首先要分析该网站以及该网站中想要获取数据的数据接口。与之前从大麦网(资讯网站)获取数据不同,这里我们解决用户登录和会话保存的问题。人人网作为曾经流行的社交网站,对于登录认证做了一些加固,不像一些网站明文传输密码。相反,密码信息是加密的。就在前段时间,我在尝试爬取一些漫画网站的时候,看到了一种利用selenium+phantomjs来模拟浏览行为,获取动态加载的漫画图片的方法。同样出于懒惰,我决定尝试使用selenium+phantomjs来绕过人人网的登录。
尝试
决定使用seleium+phantomjs作为这个爬虫的技术框架后,就开始准备环境搭建了。总体来说,环境搭建比较简单。
硒安装
pip 安装硒
phantomjs下载
您可以选择合适的操作系统从phantonjs官网下载最新版本的程序[1],官网还提供源码下载。
完成基础环境的准备后,就可以开始数据爬取了。
from selenium import webdriverdriver=webdriver.PhantomJS('/Users/tian/Downloads/phantomjs-2.1.1-macosx/bin/phantomjs')driver.set_window_size('800','600')driver.get('http://renren.com ')打印(' - - - - - - - ****************** - - - - - - - -- ------')input1=driver.find_element('id', 'email')input1.send_keys('****')input2=driver.find_element('id', '密码')input2 .send_keys ('*****')driver.find_element('id', 'login').click() 使用seleium+phantomjs模拟登录人人网的代码如上。使用seleium的webdriver.PhantomJS在没有Interface浏览器的情况下拉起phantomJS,后续操作类似于JQuery的选择器,找到需要使用的元素,然后设置相关参数。
虽然绕过人人网的登录操作很容易,但也不是没有问题。 phantomjs在并发情况下的表现并不是很理想。最终我放弃了使用seleium+phantomjs来爬取数据。
分析与设计
现在登录密码加密的问题已经解决了,我们就可以进行下一步的爬取关系网络了。社交网络有六度理论,所以一开始我想从自己的人人账号开始,爬取六度好友,得到所有人人网用户的关系网络。但这个过程应该是一个先发散后收敛的过程。人人网拥有数亿用户,单任务爬取并不是一个可行的解决方案。需要进行分布式爬取,但是使用现有的分布式爬取框架感觉有点笨重,所以针对这个爬取设计了如下的架构。
这里redis有两个功能,一是我们经常使用的共享缓存功能,二是借用redis中的队列数据结构来解耦任务,供多个worker进行好友关系数据的分布式爬取。同时,为了避免重复爬取导致任务无法结束的问题,通过redis的位图过滤得到了用户信息,从而避免了无限爬取。
login/worker是一个特殊的worker。该worker负责登录并将会话信息缓存到redis中以供其他worker使用。然后它获取数据源的好友信息并放入redis队列中,然后像其他worker一样进行消费。分布式抓取redis队列中的任务信息。
Worker的设计,为了进一步提高效率,采用了线程池+线程的方式来爬取数据。由于树莓派的内存限制,最终只爬取了我自己账号的三度好友的数据。
附注爬虫代码上传至github(传送门[3])
总结
这个爬虫的准备一开始走了很多弯路,也有一些固定思维的原因。一开始我主观上选择了seleium+phantomjs的方式,没有考虑导入数据量和爬取效率的问题。同时,也反映出前期准备时没有仔细分析目标网站连接,导致选择出现偏差。这样就做了很多无用的工作,需要以后注意。
参考
[1] phantonjs官网: http://phantomjs.org/download.html
[2] github链接: https://github.com/XueSeason/renren-album
标签:
用户评论
哇,这个话题太有意思了,人人网的老朋友关系都能被爬取,感觉隐私有点儿不安全。
有11位网友表示赞同!
人人网好友关系爬取,这个技术真是厉害,但用得不当的话,隐私泄露怎么办啊。
有5位网友表示赞同!
哎呀,我刚刚看到这个标题,突然想到我的人人网账号,好友关系被爬取了怎么办?
有18位网友表示赞同!
爬取人人网好友关系,感觉这是对社交网络的深度挖掘,但也要注意保护用户隐私。
有13位网友表示赞同!
这技术太酷了,但我不太懂,好友关系爬取后,数据怎么处理呢?
有13位网友表示赞同!
人人网好友关系爬取,这让我想起那些年我们一起在人人网的日子。
有18位网友表示赞同!
哎,人人网好友关系被爬取,感觉隐私保护是社交网络的底线。
有18位网友表示赞同!
这个技术挺有意思的,但我也担心我的个人信息会不会泄露。
有7位网友表示赞同!
人人网好友关系爬取,这对做市场研究的人来说是个大好事,但也要注意遵守法律。
有9位网友表示赞同!
看到这个标题,我第一时间想到了我的大学时光,人人网好友关系真是满满的回忆。
有15位网友表示赞同!
人人网好友关系爬取,我觉得这个技术可以在不侵犯隐私的前提下,为用户提供更多价值。
有5位网友表示赞同!
这个标题让我想起了我的人人网账号,好友关系被爬取,有点担心个人信息安全。
有17位网友表示赞同!
人人网好友关系爬取,这个技术发展得太快了,我们需要更多关注隐私保护。
有9位网友表示赞同!
这个话题让我想起了我那些年的人人网好友,爬取出来会不会有新的社交体验呢?
有12位网友表示赞同!
人人网好友关系爬取,这让我想起了那些被遗忘的社交平台,它们的数据价值有多大?
有5位网友表示赞同!
这个技术挺有意思的,但我想知道,爬取出来的好友关系数据,我们如何保证其准确性呢?
有20位网友表示赞同!
人人网好友关系爬取,这个话题让我想到了社交网络的未来,数据挖掘会成为主流吗?
有20位网友表示赞同!
看到这个标题,我有点担心,爬取好友关系会不会让我们的社交圈变得更小?
有18位网友表示赞同!
人人网好友关系爬取,这个话题让我重新审视了社交网络的安全问题,我们需要提高警惕。
有15位网友表示赞同!