2011-10-12 75 views
4

所以我想抓住從其他網站的一些圖片來自多個頁面下載圖片,問題是每個圖像是在不同的頁面抓鬥/使用PHP preg_match_all和捲曲

IE:ID/1,ID/2,ID/3等等等等

到目前爲止我有下面的代碼可以抓住使用給出從單個URL的圖像:

$returned_content = get_data('http://somedomain.com/id/1/'); 

但需要使線的上方成爲陣列(I猜),所以它會從第1頁抓取圖像,然後繼續抓取第2頁上的下一個圖像,然後第3頁等等tomatically

function get_data($url){ 
$ch = curl_init(); 
$timeout = 5; 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
$data = curl_exec($ch); 
    curl_close($ch); 
return $data; 
} 

$returned_content = get_data('http://somedomain.com/id/1/'); 

if (preg_match_all("~http://somedomain.com/images/(.*?)\.jpg~i", $returned_content, $matches)) { 

$src = 0; 
     foreach ($matches[1] as $key) { 

if(++$src > 1) break; 

      $out = $key; 
     } 

     $file = 'http://somedomain.com/images/' . $out . '.jpg'; 


$dir = 'photos'; 

$imgurl = get_data($file); 

file_put_contents($dir . '/' . $out . '.jpg', $imgurl); 

echo 'done'; 
} 

一如既往,所有的幫助表示感謝,並提前致謝。

+0

你真的確定你想使用PHP嗎?並不是說這是不可能的,但最終取決於你想要做什麼,你可能會遇到很多問題,這些問題通常是半自動更好地解決的。 – hakre

+0

PHP是目前我知道的唯一代碼(ex html,css),最終的結果就是爲我自己下載幾張圖片以便稍後瀏覽,但是這裏有大約100張圖片,我不想訪問每個頁面「點擊右鍵>>另存爲「。 – Dizzi

+0

您正在使用哪種操作系統? – hakre

回答

4

這非常令人困惑,因爲它聽起來像你只對每頁保存一個圖像感興趣。但是,這段代碼使得它看起來像你實際上試圖保存每個頁面上的每個圖像。所以完全有可能我完全誤解了......但是這裏就是這樣。

循環每頁面並不難:

$i = 1; 
$l = 101; 

while ($i < $l) { 
    $html = get_data('http://somedomain.com/id/'.$i.'/'); 
    getImages($html); 
    $i += 1; 
} 

下再假設你想將特定頁面上保存所有圖像:

function getImages($html) { 
    $matches = array(); 
    $regex = '~http://somedomain.com/images/(.*?)\.jpg~i'; 
    preg_match_all($regex, $html, $matches); 
    foreach ($matches[1] as $img) { 
     saveImg($img); 
    } 
} 

function saveImg($name) { 
    $url = 'http://somedomain.com/images/'.$name.'.jpg'; 
    $data = get_data($url); 
    file_put_contents('photos/'.$name.'.jpg', $data); 
} 
+0

我實際上已經得到了我的foreach循環工作我只需要將我的代碼稍微移動一下,但是你的工作並且很多清潔感謝! – Dizzi