《為什么采集會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.snjht.com/jiaocheng/32.html