我一天“偷了”知乎一百万用户 只为证明PHP是最好的语言

  • 时间:
  • 浏览:31

都看不少大伙儿儿圈里推荐的Python爬虫文章,都真是太小儿科,处置内容不能 然后PHP的强项,Python唯一的好处估计也就天生的Linux自带,和Perl一样,这点真是挺欠缺意思的Linux,还是Mac厚道,天生就自带了Python、Perl、PHP、Ruby,当然我也很讨厌讨论一门语言的好坏,每门语言地处就一定有它的道理,反正PHP是全世界最好用的语言,大伙儿儿都懂的。

前几天比较火的是另有一人及用C#写了另有俩个守护进程爬虫守护进程,抓取了QQ空间30000万QQ用户,其蕴含3000万用户是有QQ号、昵称、空间名称等信息的,也然后说,有详情也就3000万,跑了两周,这没什么,为了证明PHP是全世界最好的语言,我用PHP写了另有俩个守护进程爬虫守护进程,只用了一天时间,就抓了知乎3000万用户,目前跑到第8圈(depth=8)互相有关联(关注了和关注者)的用户。

爬虫守护进程设计:

将会知乎不能 登录不能获取到关注者页面,所以从chrome登录然后 把cookie拷贝下来给curl守护进程模拟登录。

使用两大独立循环守护进程组(用户索引守护进程组、用户详情守护进程组),用的是php的pcntl扩展,封装了另有俩个非常好用的类,使用起来和golang的携程也差太多了。

下面是用户详情的截图,用户索引代码例如:

这里插个题外话,经过测试,我的8核的Macbook,跑16守护进程的带宽单位最快,而16核的Linux服务器,岂都然后跑8守护进程最快,这点很糙让他要莫名其妙了,不过既然测试出最后守护进程数,就按照最后设置就好啦。

1、用户索引守护进程组先以另有俩个用户为起点,抓取你这些用户的关注了和关注者,然后 合并入库,将会是多守护进程,所以当有另有俩个守护进程在处置同另有俩个用户入库的然后 就会出現 重复的用户,所以数据库用户名字段一定要建立唯一索引,当然也都不能 用redis什么第三方缓存来保证原子性,你这些就见仁见智了。

通过步骤一然后 ,大伙儿儿就得到下面的用户列表:

2、用户详情守护进程组按照时间正序,拿到最先入库的用户抓取详情,然后 把更新时间更新为当前时间,不能 就都不能 变成另有俩个死循环,守护进程都不能 无休止的跑,不断的循环更新用户信息。

守护进程稳定运行到第3天 ,老会 不能新数据了,检查了一分发现知乎改规则了,不知是为了防我,还是碰巧,反正给我返回的数据是不能 的

第一感觉然后胡乱给我输出数据让他要分发不能,换了IP、模拟伪装了些数据,都没用,老会 感觉你这些熟透悉,会不用是gzip?抱着怀疑的态度,试了试gzip,首先当然是告诉知乎不用给我gzip压缩过的数据

把 “Accept-Encoding: gzip,deflate\r\n”; 改成 “Accept-Encoding:deflate\r\n”; 换成了 gzip,然并卵!

看来知乎是强制要给我gzip压缩数据了,既然不能,不能 就解压呗,查了一下php解压gzip,发现就另有俩个函数gzinflate,于是把获取到得内容换成:

$content = substr($content, 10);

$content = gzinflate($content));

这里我真想说,PHP真的是全世界最好的语言,就另有俩个函数,就彻底处置了疑问,守护进程又欢快的跑起来了。

在匹配内容的然后 ,知乎的细心也是给了我无数的帮助,例如让他要分清用户性别:

哈哈开玩笑的拉,真是是样式上面有 icon-profile-female 和 icon-profile-male ^_^

我蛋疼的抓了它不能多用户,到底有什么用呢?

真是没什么用,我然后闲的蛋疼 ^_^

有了什么信息,真是就都不能 做一点别人开头闭口就乱吹一通的大数据分析拉

最常见的当然是:

1、性别分布

2、地域分布

3、职业分布

4、每个职业的男女比例

当然,按照关注人数、浏览人数、提问数、回答数等排序,看看人民全是关注什么,民生、社会、地理、政治,整个互联网都尽收眼底拉。。

也许,你还都不能 把头像拿来分析,用开源的验黄守护进程,把色情的筛选出来,然后 去拯救东莞? ^_^

然后 ,你还都不能 看看什么大学出来的人,最后都干了什么。

有了什么数据,是全是都不能 打开脑洞 ^_^

下面是利用什么数据做出来的一点有趣的图表,实时图表数据都不能 去 http://www.epooll.com/zhihu/ 上看

有好的文章希望站长之家帮助分享推广,猛戳这里让他要投稿