3

Flickrアカウントから自分のWebサイトに画像をプルしています。約9行のコードを使用して、画像をプルするpreg_match_all関数を作成しました。

DOMを介してHTMLを解析する方がよいことを何度か読んだことがあります。

個人的には、DOMを介してHTMLを解析する方が複雑であることがわかりました。PHPのDOMDocumentを使用して画像をプルするための同様の関数を作成しました。これは、約22行のコードです。作成には時間がかかりましたが、どのようなメリットがあったのかわかりません。

ページはコードごとにほぼ同時に読み込まれるため、DOMDocumentを使用する理由がわかりません。

DOMDocumentはpreg_match_allよりも高速に動作しますか?

興味があれば、私のコードを紹介します(DOMDocumentコードの長さがわかります)。

//here's the URL
$flickrGallery = 'http://www.flickr.com/photos/***/collections/***/';

//below is the DOMDocument method
$flickr = new DOMDocument();
$doc->validateOnParse = true;
$flickr->loadHTMLFile($flickrGallery);
$elements = $flickr->getElementById('ViewCollection')->getElementsByTagName('div');
$flickr = array();
for($i=0;$i<$elements->length;$i++){
    if($elements->item($i)->hasAttribute('class')&&$elements->item($i)->getAttribute('class')=='setLinkDiv'){
        $flickr[] = array(
                          'href' => $elements->item($i)->getElementsByTagName('a')->item(0)->getAttribute('href'), 
                          'src' => $elements->item($i)->getElementsByTagName('img')->item(0)->getAttribute('src'), 
                          'title' => $elements->item($i)->getElementsByTagName('img')->item(0)->getAttribute('alt')
                          );
    }
}
$elements = NULL;
foreach($flickr as $k=>$v){
    $setQuery = explode("/",$flickr[$k]['href']);
    $setQuery = $setQuery[4];
    echo '<a href="?set='.$setQuery.'"><img src="'.$flickr[$k]['src'].'" title="'.$flickr[$k]['title'].'" width=75 height=75 /></a>';
}
$flickr = NULL;

//preg_match_all code is below

$sets = file_get_contents($flickrGallery);
preg_match_all('/(class="setLink" href="(.*?)".*?class="setThumb" src="(.*?)".*?alt="(.*?)")+/s',$sets,$sets,PREG_SET_ORDER);
foreach($sets as $k=>$v){
    $setQuery = explode("/",$sets[$k][2]);
    $setQuery = $setQuery[4];
echo '<a href="?set='.$setQuery.'"><img src="'.$sets[$k][3].'" title="'.$sets[$k][4].'" width=75 height=75 /></a>';
}
$sets = NULL;
4

2 に答える 2

3

正確さのために速度を犠牲にすることをいとわない場合は、先に進んで、正規表現を使用して独自のパーサーをロールしてみてください。

「個人的には、DOMを介してHTMLを解析する方が複雑だと思いました」とあなたは言います。結果の正確さを最適化していますか、それともコードの記述がどれほど簡単ですか?

複雑ではない速度とコードだけが必要な場合は、これを使用してみませんか。

$array_of_photos = Array( 'booger.jpg', 'aunt-martha-on-a-horse.png' );

または多分ちょうど

$array_of_photos = Array();

それらは一定時間で実行され、理解しやすいです。問題ありませんよね?

あれは何でしょう?正確な結果が必要ですか?次に、正規表現を使用してHTMLを解析しないでください

最後に、DOMのようなパーサーを使用している場合は、何年にもわたって十分にテストおよびデバッグされているコードを使用しています。解析を行うために独自の正規表現を作成する場合は、自分で作成、テスト、およびデバッグする必要のあるコードを使用します。多くの人が長年使用しているツールを使いたくないのはなぜですか?あなたはその場で自分でより良い仕事をすることができると思いますか?

于 2012-12-28T20:45:07.423 に答える
2

ページに小さな変更が加えられた場合、これが壊れる可能性が低いため、DOM を使用します。

于 2011-08-15T16:08:56.693 に答える