2012-01-24 88 views
0

我有一個腳本,我認爲它是非常基本的抓取,可以稱它爲你,但平均需要至少6秒......是否有可能加速它? $ date變量僅用於計時代碼,並且不會爲其花費的時間添加任何重要內容。我設置了兩個定時標記,每個定時標記之間大約3秒鐘。例如下面的網址進行測試我如何加快速度?

$date = date('m/d/Y h:i:s a', time()); 

echo "start of timing $date<br /><br />"; 

include('simple_html_dom.php'); 

function getUrlAddress() 
{ 
$url = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http'; 
return $url .'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
} 

$date = date('m/d/Y h:i:s a', time()); echo "<br /><br />after geturl $date<br /><br />"; 

$parts = explode("/",$url); 

$html = file_get_html($url); 

$date = date('m/d/Y h:i:s a', time()); echo "<br /><br />after file_get_url $date<br /><br />"; 

$file_string = file_get_contents($url); 
preg_match('/<title>(.*)<\/title>/i', $file_string, $title); 
$title_out = $title[1]; 

foreach($html->find('img') as $e){ 

    $image = $e->src; 

    if (preg_match("/orangeBlue/", $image)) { $image = ''; } 

    if (preg_match("/BeaconSprite/", $image)) { $image = ''; } 

    if($image != ''){ 

    if (preg_match("/http/", $image)) { $image = $image; } 

    elseif (preg_match("*//*", $image)) { $image = 'http:'.$image; } 

    else { $image = $parts['0']."//".$parts[1].$parts[2]."/".$image; } 

    $size = getimagesize($image); 
    if (($size[0]>110)&&($size[1]>110)){ 
    if (preg_match("/http/", $image)) { $image = $image; } 
    echo '<img src='.$image.'><br>'; 
    } 
    } 
    } 

$date = date('m/d/Y h:i:s a', time()); echo "<br /><br />end of timing $date<br /><br />"; 

例如URL

UPDATE

這是實際的標記顯示什麼時間:

時間2012年1月24日12時31分50秒開始am

geturl之後01/24/2012 12:31:50 am

時機file_get_url 2012年1月24日上午12點31分53秒

結束後的2012年1月24日上午12時31分57秒

http://www.ebay.co.uk/itm/Duke-Nukem-Forever-XBOX-360-Game-BRAND-NEW-SEALED-UK-PAL-UK-Seller-/170739972246?pt=UK_PC_Video_Games_Video_Games_JS&hash=item27c0e53896` 
+0

你在哪裏調用'getUrlAddress()'和/或設置'$ url'變量? – Phil

+0

你有3個時間標記。你能顯示他們輸出的內容嗎?因此,「開始計時」,「geturl之後」,「file_get_url之後」,「計時結束」 –

+0

有一點很突出,那就是你自由使用'preg_match'。有時'strpos'或'strstr'可以更快。正如@Hans所說,'getImageSize()'也是值得關注的東西。 –

回答

1

這也許是和getimagesize功能 - 它會和獲取頁面上的每個圖像,以確定其大小。也許你可以用curl編寫一些東西來獲取僅用於內容大小的標題(儘管實際上,這可能是getimagesize所做的)。

無論如何,回到當天我寫了一些蜘蛛,這樣做的速度很慢,網絡速度比以往任何時候都要好,它仍然是每個元素的獲取。我甚至不關心圖像。

+0

是的,'getImageSize()'是問題的一部分。我有一個腳本做類似的事情,並且我也遇到了與該函數相同的問題 –

1

我不是一個PHP的傢伙,但它就像你走出去到網上來獲取文件兩次...

首先使用這看起來對我說:

$html = file_get_html($url); 

然後再次使用這樣的:

$file_string = file_get_contents($url); 

所以,如果每個命中需要幾秒鐘,你也許能找到一個方法來削減下來到一個單一的網絡命中,以減少你的時間。

要麼這樣,要麼我是盲人。這是一個真正的可能性!