爬取网页数据问题

FG2006 2010-08-06 05:57:10
程序中遇到两个问题: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++;
...全文
213 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CunningBoy 2010-08-06
  • 打赏
  • 举报
回复
用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);
Dleno 2010-08-06
  • 打赏
  • 举报
回复
file_get_contents的效率很低,而且也会有时候取不到值(莫名其妙的没有返回结果),好象百度不会封的
相对来说用curl和socket要好得多,也没那个问题,socket的效率更要好点
amani11 2010-08-06
  • 打赏
  • 举报
回复
伪造user_agent成浏览器 效果估计会好一些

默认

; Define the User-Agent string
user_agent="PHP"//通常是这个

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧