用file_get_contents采个5分钟就failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in 实际在本地是能打开目标网页的,且能采集的, 然后半小时内一直是不能采,半小时后又能采5分钟。。
用 curl_init试了对方直接返回检测到非法程序,请求被拒绝。。 在那半小时前的5分钟之间用curl_init也是能采的。。
,还有我采集他的链接地址的时候连续1小时采集都没问题(因为流量非常少吧。。),我想它肯定检测单个用户短时间的流量而判断了。怎么破它的反采集啊?$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//在需要用户检测的网页里需要增加下面两行
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch, CURLOPT_USERPWD, US_NAME.":".US_PWD);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;

解决方案 »

  1.   

    什么网站,curl都不能采集?那不是浏览器都不能正常访问?
      

  2.   

    把User-Agent、Cookie、Session等Header信息都加进去,每次间隔加一个延迟只要浏览器能放,就肯定能采集的……
      

  3.   

    关键是curl到底能拟浏览器多少东西?
      

  4.   

    如果你有多个代理服务器资源的话,可以curl做代理轮着去采看看
      

  5.   

    还有一个方法,cron job 设置所有的你要采集的网址, 定时打开firefox浏览器,正常浏览网页(非curl模拟,不过内存较大),然后(firefox控制台设置)把网站源码保存到本地文件夹。再慢慢分析。不相信有网站会蠢到拒绝真的firefox浏览器。如果真是那样的话,那种网站永远不可能做大(alexa不会超过1W名),没有任何采集价值,直接放弃。
      

  6.   

    这个跟浏览器有关系吗。user-agent都是可以伪造的
      

  7.   

    延迟2秒 也不能通过,, 3秒的话自己也不能承受了。。
    User-Agent、Cookie、Session等Header信息 这些怎么加?
      

  8.   

    不好破的。一种是记录ip和agent信息。 有的网站会记录你一般时间内请求次数,可以放在数据库或memcahe中或cookie中。如要一定时间内超限就禁你一段时间,当然google之类的是不禁的。你可以仿google.  不过,现在搜索引擎太多。许多网站搜索引擎也是禁的。还有一种就是充分利用浏览器和curl之类的不同特性。
      

  9.   

    现在放本地来采了,每300换次IP 很痛苦啊。。
    cookie的话好说,其他的缓存就没办法了。,。
    怎么仿google啊?
      

  10.   


    嘿嘿,那么,大概已经猜到你想采集的什么类型的网站……OK,回到技术角度,如20楼所说,如果浏览器可以,程序不行的话,肯定是你程序的问题。
    如果还在纠结不定的话,必要时,放弃WIN平台,采用LINUX,LINUX控制台比WIN的CMD强悍。
    如我前面说的方法,cron job 设置所有的你要采集的网址,定时开启真实的浏览器访问该网站,然后在控制台里设置浏览器,保存源码到本地磁盘,等所有的源码下载完之后,再写PHP脚本批量分析你前面下载的文件进行采集。