0

私はかなり基本的なスクレイピングだと思うスクリプトを持っています、それをあなたが望むものと呼んでください、しかしそれは平均して少なくとも6秒かかります...それをスピードアップすることは可能ですか?$ date変数は、コードのタイミングを計るためにのみ存在し、所要時間に重要なものを追加することはありません。2つのタイミングマーカーを設定しましたが、それぞれの間隔は約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 />";

URLの例

アップデート

これは、タイミングマーカーが示す実際の内容です。

タイミングの開始01/24/201212:31:50am

geturlの後2012年1月24日12:31:50am

file_get_urlの後2012年1月24日12:31:53am

タイミングの終わり01/24/201212:31:57am

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の人ではありませんが、ファイルを2回取得するためにWebにアクセスしているように見えます...

最初にこれを使用します:

$html = file_get_html($url);

次に、これを再び使用します。

$file_string = file_get_contents($url);

したがって、各ヒットに数秒かかる場合は、これを1つのWebヒットに削減する方法を見つけることで、タイミングを短縮できる可能性があります。

それか、私は盲目です。これは本当の可能性です!

于 2012-01-24T00:46:44.857 に答える