文档章节

只为了证明PHP是最好的语言

字数 666
阅读 93
收藏 5
<?php
/×
只为了证明PHP是最好的语言。
目前设计的该程序是顺序执行,生产和消费者没有分开,使用来一个死循环,不断从redis的list里取出最新的QQ号码,然后用该QQ号码拼接出需要网站的地址,一次访问并存入mongodb,这里只是整个实现的流程代码,没有写QQ空间API接口。由于我分析的接口返回的是json,所以我直接存入mongodb。回来分析也非常方便。为了加大速度,我目前开了10进程,虽然没有到腾讯封IP的极限,但是以及到来我的笔记本的极限了。10个进程24小时可以采集180W,如果电脑配置高点,一天200多万不是问题。
其中,懒得自己写curl类,用之前大神爬取知乎的时候写的类
https://github.com/hhqcontinue/zhihuSpider



××/
include "phpspider/config.php";
include "phpspider/cache.php";
include "phpspider/rolling_curl.php";


$cookie = trim(file_get_contents("cookie.txt"));

$curl = new rolling_curl();
$curl->set_cookie($cookie);
$curl->set_gzip(true);
$curl->callback = function($response, $info, $request, $error) {

    preg_match("#xxxxx#", $request['url'], $out);
    $qq = $out[1];

 

    if (empty($response)) 
    {
       
        file_put_contents("./data/error_timeout.log", date("Y-m-d H:i:s") . ' ' . $username.' --- '.json_encode($error)."\n", FILE_APPEND);
        // 注意这里不要用 exit,否则整个程序就断开了
        return;
    }

    // 如果是个人信息
    if (strpos($request['url'], 'a') ==true )
    {
     //将信息添加至mongodb,先判断是否是错误信息
    }
    
    //如果是来访QQ
    if (strpos($request['url'], 'b') == true)
    {
       //将信息添加至mongodb,先判断是否是错误信息
       //从中取出QQ号码存入redis
       cache->get_instance()->lpush("qq");//一定要从左端插入,否则是出现死循环,例如A访问来B空间,B同样也访问来A空间,如果在设置网址的时候取先存入的QQ,程序就会不断在A和B之间访问,如果设置网址的时候取最新的则会将他们存入栈底部
    }
    
    
    //如果是说说
    if (strpos($request['url'], 'c') == true)
    {
     ///将信息添加至mongodb,先判断是否是错误信息
    }
    

    
};

while(true){
        $qq=cache->get_instance()->lpop("qq");//用从左端删除
        if ($qq=="")$qq="12345678";//这里是登录的QQ号码
         $url = "http://a".$qq;//个人信息
        $curl->get($url);
        $url = "http://b".$qq;//来访QQ
        $curl->get($url);
         $url = "http://c".$qq;//最近说说
        $curl->get($url);
          $data = $curl->execute();
    // 睡眠100毫秒,太快了会被认为是ddos
    usleep(100000);
}



因为,生产者和消费者没有分开,所以其中有一个问题,就是生产者产生的QQ号码多,消费者使用速度低,所以建议将采集QQ来访者和采集数据分开,采集数据可以多开写进程


用到的类库地址https://github.com/hhqcontinue/zhihuSpider

© 著作权归作者所有

纵使有花兼明月何堪无酒亦无人
粉丝 37
博文 45
码字总数 18489
作品 2
安阳
后端工程师
私信 提问
Python爬虫五大零基础入门教程

教程一:Python爬虫学习系列教程 这个博主的这个爬虫学习系列教程,很详细啊,从入门到实战、进阶等都有详细的文档介绍,对爬虫感兴趣的小伙伴推荐一看。 教程二:学习网站上的爬虫教程 实验...

不怕摔倒的菜鸟
2017/11/29
0
0
做软件工程师, 而不是一个C++牛, PHP牛 或者 Python 牛

很多人说宏哥喜欢争论语言, 大多时候, 是宏哥争论的不是语言, 而是如何选择正确的工具, 最快, 最好质量去达到既定目标. 很多人觉得宏哥争论语言, 实际上, 是因为他们自己变成某种语言的附属品...

宏哥
2012/11/06
307
1
网站访问速度提升200%以上,阿里云虚拟主机支持PHP最新版本

日前,阿里云虚拟主机推出了新功能,支持PHP的最新版本 7.0和7.1,并支持用户在多个不同PHP版本之间切换。 PHP 作为最好的Web编程语言,最新版本已经更新到了7.0和7.1。阿里云作为国内虚拟主...

云攻略小攻
2017/12/28
0
0
编程语言最新排行榜,Java跌落编程热潮,Python热度持续增长!

很多程序员总是拿Java和Python说事,认为Java仍然是最火的编程语言。但是我们为什么没想过总是和Python挂钩而不是别的编程语言? 时隔一年的趋势相比较 PYPL最近刚好发布2018年7月编程语言指...

Python新世界
2018/07/27
0
0
php和mysql 字符长度总结(转)

只适用mysql5.0以上的版本: 1.一个汉字占多少长度与编码有关: UTF-8:一个汉字=3个字节 GBK:一个汉字=2个字节 2.varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实...

fzxu_05
2012/06/13
691
0

没有更多内容

加载失败,请刷新页面

加载更多

zk中ToBeAppliedRequestProcessor解析

ToBeAppliedRequestProcessor在Leader中 在已处理事务和最后处理事务处理器之间,处理器链上下一个是FinalRequestProcessor public void processRequest(Request request) throws RequestPro...

writeademo
18分钟前
2
0
Allegro快捷键设置-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
19分钟前
2
0
idea maven web项目启动build时报错java.lang.NullPointerException

之前还好好的,重启一下idea就报这个错了,大概率是tomcat没杀掉端口被占用了,在tomcat配置中更换一下sever端口就好了

宇辰OSC
22分钟前
2
0
weed3-2.3.1.查询之输出

Weed3 一个超轻量级ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 查询可是个复杂的话题了,可能我们80%的数据库处理都在查询。 今天先...

刘之西东
22分钟前
2
0
【Android JetPack系列】数据绑定:DataBinding

参考MVVM

Agnes2017
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部