Я вытаскиваю изображения из своей учетной записи Flickr на свой сайт, и я использовал около девяти строк кода для создания функции preg_match_all, которая вытягивала бы изображения.
Я несколько раз читал, что лучше анализировать HTML через DOM.
Лично мне было сложнее разобрать HTML через DOM. Я создал аналогичную функцию, чтобы вытащить изображения с помощью DOMDocument PHP, и это около 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;
Если вы готовы пожертвовать скоростью для правильности, тогда продолжайте и попробуйте развернуть свой собственный парсер с помощью регулярных выражений.
Вы говорите: «Лично я усложнил анализ HTML через DOM». Вы оптимизируете правильность результатов или насколько легко писать код?
Если все, что вам нужно, это скорость и код, который не является сложным, почему бы просто не использовать это:
$array_of_photos = Array( 'booger.jpg', 'aunt-martha-on-a-horse.png' );
или, может быть, просто
$array_of_photos = Array();
Они работают в постоянное время, и их легко понять. Нет проблем, не так ли?
Что это? Вы хотите получить точные результаты? Тогда не анализируйте HTML с регулярными выражениями .
Наконец, когда вы работаете с парсером типа DOM, вы работаете с частью кода, который был хорошо протестирован и отлажен в течение многих лет. Когда вы пишете собственные регулярные выражения для синтаксического анализа, вы работаете с кодом, который вам придется писать, тестировать и отлаживать. Почему бы вам не захотеть работать с инструментами, которые многие люди используют в течение многих лет? Как вы думаете, вы можете сделать лучшую работу самостоятельно на лету?
Я бы использовал DOM, поскольку это менее вероятно, чтобы сломаться, если какие-либо небольшие изменения внесены на страницу.