1. 程式人生 > >PHP cURL抓取網上圖片

PHP cURL抓取網上圖片

open content fopen 命令行工具 php curl AI s函數 for inf

  cURL的底層是由一個命令行工具實現的,用於獲取遠程文件或傳輸文件,更多的情況是用來模擬get/post表單提交。也可以用戶文件上傳,爬取文件,支持FTP/FTPS,HTTP/HTTPS等協議,通俗來講,這些類型的服務器,cURL都可以抓取。

  今天嘗試了一下用cURL抓取無聊網網上的圖片。上代碼。

 1 <?php
 2 $url = ‘http://wuliaoo.com/tuhua/‘;
 3 $ch = curl_init();
 4 
 5 curl_setopt($ch,CURLOPT_URL,$url);
 6 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //
設置curl_exec()獲取的信息以字符流形式返回 7 curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1); // 設置CURL選項為TLS 8 9 $data = curl_exec($ch); 10 $info = curl_getinfo($ch); 11 curl_close($ch); 12 // var_dump(htmlentities($data)); 打印獲取的網頁源碼,但是不加htmlentities函數的話會將頁面輸出 13 preg_match_all(‘/<img[^>]*src=(\‘|\")(.*?)\\1[^>]*>/i‘,$data
,$array); // 匹配正則,所有的img標簽 14 15 $path = ‘./aaimage/‘; // 目錄提前建好 16 foreach ($array[2] as $k => $v) { 17 if(fopen($array[2][$k],‘r‘)){ 18 ob_clean(); // 清空PHP緩存區的內容。這一步其實不確定需不需要,但是為了保險,我還是加上了。 19 $ch = curl_init(); 20 curl_setopt($ch, CURLOPT_URL, $v); 21 curl_setopt($ch
, CURLOPT_RETURNTRANSFER, 1); 22 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 23 $file = curl_exec($ch); 24 curl_close($ch); 25 $filename = pathinfo($v, PATHINFO_BASENAME); // 獲取文件名和後綴 26 27 $resource = fopen($path . $filename, ‘a‘); 28 fwrite($resource, $file); 29 fclose($resource); 30 } 31 32 }

其實我們可以把這段代碼封裝好。而且還可以把獲取網頁內容換成file_get_contents()的形式。同樣可以獲取網頁的內容。

function down_pic($url = null){
    $data = file_get_contents($url);
    preg_match_all(‘/<img[^>]*src=(\‘|\")(.*?)\\1[^>]*>/i‘,$data,$array);

    $path = ‘./aaimage/‘;
    foreach ($array[2] as $k => $v) {
        if(fopen($array[2][$k],‘r‘)){

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $v);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
            $file = curl_exec($ch);
            curl_close($ch);
            $filename = pathinfo($v, PATHINFO_BASENAME);
            
            $resource = fopen($path . $filename, ‘a‘);
            fwrite($resource, $file);
            fclose($resource);
        }

    }
}

// 這是獲取該網站5頁的圖片
for($i=1;$i<=5;$i++){
    $url = ‘http://wuliaoo.com/tuhua/page/‘.$i;
    down_pic($url);
}

獲取頁數各個網站不是固定。

技術分享圖片

這是第一頁。page不帶參數或者帶上參數都可以跳轉到這一頁。

技術分享圖片

這是第二頁的URL

所以用for循環獲取的話直接拼上後面的參數即可。當然,代碼還有很多可以優化的地方。歡迎指正。

以上

PHP cURL抓取網上圖片