为什么采集会403和301、302失败?使用php的curl采集2个重要参数
《为什么采集会403和301、302失败?使用php的curl采集2个重要参数》要点: 为什么采集会失败? 很多CMS或采集类程序,在使用curl采集时,都忽略了两个重要的参数,而这两个是否使用,直接决定了您在采集一些大站点时,能不能成功。 主要是图片采集,一般的网站采集时是没有问题的,很容易采到。但大站通常会有这3种情况: 1、403拒绝: 有些大站,采集它就会有这种现象。一般是判断来源referer值,而普通的来源地址,照样被拒绝。解决办法有两种场景常见: A、需要使用一些baidu等大站源做referer才能被允许。 这样就必须设置CURLOPT_REFERER,备选参数CURLOPT_USERAGENT最好也一起设置了。 B、必须使用其顶级站点做referer: 在一些较大站点,图片可能会放在独立的域名服务器下,比如 http://img.jb51.cc/ 或者很多站点也会放在七牛等存储云上。这样的站点有时会检查referer,因此会采集失败。 这时需要判断其顶级域名。把referer设置成其顶级域名即可。 脚本之家PHP有专用函数,可以取得顶级域名,整合到采集类中即可,如下,$url是一个采集的图片URL: $urlInfo =parse_url($url); if( !empty($urlInfo['host']) ) { $topDomain = getTopDomain ( $urlInfo['host'] ) ; if(!empty($topDomain)) $this->referer = $urlInfo['scheme'].'://'.$topDomain; } 2、301和302跳转: 这个也是在另一个大网站上遇到,它的图片301跳转或302跳转到另一个地方,这时就要curl跟进跳转后的地址。对应的选项是 CURLOPT_FOLLOWLOCATION 因此这两个参数必须设置: curl_setopt ($ch,CURLOPT_REFERER,$referer); //很重要, curl_setopt($ch, CURLOPT_USERAGENT, $http_user_agent); //不是太重要,可以随便写蜘蛛user agent curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //很重要,否则有的301跳转到真实页,就抓不到。 其它还有一些受拒,比如 没有cookies、token,但以上是主要的。 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |