0

我有一个脚本,我认为它是非常基本的抓取,随便你怎么称呼它,但它平均至少需要 6 秒……是否可以加快速度?$date 变量仅用于对代码进行计时,并且不会增加任何重要的时间。我设置了两个计时标记,每个标记之间大约 3 秒。下面的示例 URL 用于测试

$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 />";

示例网址

更新

这实际上是时间标记显示的内容:

时间开始 01/24/2012 12:31:50 am

在 geturl 2012 年 1 月 24 日上午 12:31:50 之后

在 file_get_url 2012 年 1 月 24 日上午 12:31:53 之后

计时结束 01/24/2012 12:31:57 am

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`
4

2 回答 2

1

它可能是 getimagesize 函数 - 它正在获取页面上的每个图像,以便确定大小。也许你可以用 curl 写一些东西来获取 Content-size 的标题(虽然,实际上,这可能是 getimagesize 所做的)。

无论如何,早在我写了几个蜘蛛的那一天,它做起来有点慢,互联网速度比以往任何时候都好,它仍然是每个元素的获取。我什至不关心图像。

于 2012-01-24T00:27:13.973 回答
1

我不是 PHP 人,但在我看来,你要上网两次来获取文件......

首先使用这个:

$html = file_get_html($url);

然后再次使用这个:

$file_string = file_get_contents($url);

因此,如果每次点击都需要几秒钟的时间,您可能可以通过找到一种方法将其减少到单个网络点击来缩短时间。

要么,要么我瞎了。这是一个真正的可能性!

于 2012-01-24T00:46:44.857 回答