function get_content($url){
if(!strpos($url, '://')) return 'Invalid URI';
$content = '';
if(ini_get('allow_url_fopen')){
    $cnt=0;
        while($cnt < 15 && ($content=@file_get_contents($url))===FALSE) $cnt++;
}
elseif(function_exists('curl_init')){
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, 0);
$content = curl_exec($handle);
curl_close($handle);
}
elseif(function_exists('fsockopen')){
$urlinfo = parse_url($url);
$host    = $urlinfo['host'];
$str     = explode($host, $url);
$uri     = $str[1];
unset($urlinfo, $str);
$content = '';
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if(!$fp){
$content = 'Can Not Open Socket...';
}
else{
$out = "GET $uri   HTTP/1.1\r\n";
$out.= "Host: $host \r\n";
$out.= "Accept: */*\r\n";
$out.= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
$out.= "Connection: Close\r\n\r\n";
fputs($fp, $out);
while (!feof($fp)){
$content .= fgets($fp, 4069);
}
fclose($fp);
}
}
if(empty($content)) $content = '无法打开该链接!';
return $content;
}
上面是一个利用PHP的fsockopen来采集页面的小偷程序,以前可以用上面的程序来采集GOOGLE的搜索结果页面,但是随着Google退出中国,你会发现再用上面的程序来采集,GOOGLE会返回一个302页面,点击页面内的链接后,要求输入验证码才会返回搜索页面,比如下面的搜索请求:
http://www.google.com.hk/search?hl=zh-CN&q=site%3A35926.com
一开始使用你可以去掉hl参数用http://www.google.com.hk/search?q=site%3A35926.com来采集,但是随着你的程序多次采集在大约5次后,又会出现302页面,后来通过改变hl参数也可以采集到一些内容,比如
http://www.google.com.hk/search?hl=zh-TW&q=site%3A35926.com
http://www.google.com.hk/search?hl=zh-HK&q=site%3A35926.com
但是毫无例外,多次采集后出现302页面,那么到底还能不能采集到GOOGLE的搜索结果页面呢?这里是为了采集GOOGLE的收录数,网上很多站长工具都采集不到GOOGLE的收录数了,可不可以用模拟浏览器的方法来实现?小弟没办法,各路大哥是否有办法呢?最起码我发现chinaz.com是能够采集到GOOGLE的收录数的。希望能解决该问题大哥给出代码。

解决方案 »

  1.   

    302这个是你偷得太快,google把你暂时block了,
    你每个页面偷完了,sleep个几秒,再偷就没事了
      

  2.   

    连GOOGLE都想偷,太有才了。
    MARK,关注ING。
      

  3.   

    虽然没解决,但是也谢谢大家了,其实我就是想查询Google收录数,现在很多网站都搞不顶了,包括大名鼎鼎的tool.admin5.com,估计是Google针对中国做的限制。