首頁  >  文章  >  後端開發  >  使用file_get_contents和curl寫入採集

使用file_get_contents和curl寫入採集

PHP中文网
PHP中文网原創
2017-07-29 18:27:011617瀏覽

常常會發現要用到的資料都在一個網站上,而且資料展現格式都是一樣,像是淘寶或亞馬遜上成千上萬的產品,如果手工錄入資訊的話工作量就太大了,這時我們就可以編寫採集程式直接採集並展現出來。 伺服器支援file_get_contents和curl

先在頁面加入一個文字方塊和提交按鈕,文字方塊用來輸入採集頁面位址。

採集需要用到正規截取函數

function preg_substr($start, $end, $str) // 正则截取函数      
{      
    $temp = preg_split($start, $str);      
    $content = preg_split($end, $temp[1]);      
    return $content[0];      
}


#擷取需要用到字串截取函數 

function str_substr($start, $end, $str) // 字符串截取函数      
{      
    $temp = explode($start, $str, 2);      
    $content = explode($end, $temp[1], 2);      
    return $content[0];      
}


還有一個保存採集的內容的函數:

function writelog($str)
{
@unlink("log.txt");
$open=fopen("log.txt","a" );
fwrite($open,$str);
fclose($open);
}

有時候採集到的內容和我們透過瀏覽器查看的內容不一致,導致我們找不到正確的正規表示式,這裡就可以打開已儲存的txt文件,在裡面找到正確的截取字串。

如果需要連圖片也採集下來就需要用到圖片函數:

function getImage($url, $filename='', $dirName, $fileType, $type=0)
{
    if($url == ''){return false;}
    //获取文件原文件名
    $defaultFileName = basename($url);
    //获取文件类型
    $suffix = substr(strrchr($url,'.'), 1);
    if(!in_array($suffix, $fileType)){
        return false;
    }
    //设置保存后的文件名
    $filename = $filename == '' ? time().rand(0,9).'.'.$suffix : $defaultFileName;
          
    //获取远程文件资源
    if($type){
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $file = curl_exec($ch);
        curl_close($ch);
    }else{
        ob_start();
        readfile($url);
        $file = ob_get_contents();
        ob_end_clean();
    }
    //设置文件保存路径
    $dirName = $dirName.'/'.date('Y', time()).'/'.date('m', time()).'/'.date('d',time()).'/';
    if(!file_exists($dirName)){
        mkdir($dirName, 0777, true);
    }
    //保存文件
    $res = fopen($dirName.$filename,'a');
    fwrite($res,$file);
    fclose($res);
    return $dirName.$filename;
}

加入採集程式碼,由於這裡加入擷取程式碼不讓提交,直接上圖;

我們以亞馬遜的一個產品頁為例:輸入某個產品連結:######看看採集結果如下圖,這裡只展示內容,加入資料庫就比較簡單了,有時間再介紹自動進入下級連結或自動翻頁的採集。 ###

以上是使用file_get_contents和curl寫入採集的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn