《为什么采集会403和301、302失败?使用php的curl采集2个重要参数》要点:
本文介绍了为什么采集会403和301、302失败?使用php的curl采集2个重要参数,希望对您有用。如果有疑问,可以联系我们。
相关主题:PHP开发
为什么采集会失败?
很多CMS或采集类程序,在使用curl采集时,都忽略了两个重要的参数,而这两个是否使用,直接决定了您在采集一些大站点时,能不能成功。
主要是图片采集,一般的网站采集时是没有问题的,很容易采到。但大站通常会有这3种情况:
1、403拒绝:
有些大站,采集它就会有这种现象。一般是判断来源referer值,而普通的来源地址,照样被拒绝。解决办法有两种场景常见:
A、需要使用一些baidu等大站源做referer才能被允许。
这样就必须设置CURLOPT_REFERER,备选参数CURLOPT_USERAGENT最好也一起设置了。
B、必须使用其顶级站点做referer:
在一些较大站点,图片可能会放在独立的域名服务器下,比如 http://img.vephp.com/ 或者很多站点也会放在七牛等存储云上。这样的站点有时会检查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,但以上是主要的。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/32.html