程序中遇到两个问题:1、我在程序中爬取百度上的数据,同一个ip爬取的次数太多被屏蔽了,有好的办法解决吗?用专门的爬虫程序可以解决吗?2、我连续去爬取同一网站的多个网址上的数据,在循环中做的,其中有一个爬取不成功的时候,循环就无法进行下去了,是什么原来呢?代码如下:        header("Content-Type:text/html;charset=utf-8");
$keyword=iconv("utf-8","gb2312",$keyword);
$keyword = str_replace(' ','%20',$keyword);
$url = "http://www.baidu.com/s?wd=$keyword";

$opts = array(
   'http'=>array(
 'method'=>"GET",
 'timeout'=>30, 
   )
    );
    $context = stream_context_create($opts);
    $cnt=1; 
while(($html = @file_get_contents($url,false,$context)) === false && $cnt <= 2  )
$cnt++;

解决方案 »

  1.   

    伪造user_agent成浏览器 效果估计会好一些默认; Define the User-Agent string
     user_agent="PHP"//通常是这个
      

  2.   

    file_get_contents的效率很低,而且也会有时候取不到值(莫名其妙的没有返回结果),好象百度不会封的
    相对来说用curl和socket要好得多,也没那个问题,socket的效率更要好点
      

  3.   

    用cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com/s?wd=$keyword');
    curl_setopt(CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.437.3 Safari/534.1");
    curl_exec($ch);