Запускать несколько запросов XPath для дочерних элементов или некоторые запросы XPath для всего документа HTML? (PHP) - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу очистить сайт, используя синтаксический анализ DOM и XPath. Страница HTML имеет 128 результатов.

Лучше ли выполнить один запрос XPath для всего HTML, а затем выполнить много запросов XPath к результатам:

$video_urls = $xpath->query('//div[contains(@class, "vid")]/a/@href');
foreach($videos as $video) {
    $video_url = $xpath->query('./a/@href', $video)->item(0)->nodeValue;
    $thumb = $xpath->query('./a/img/@src', $video)->item(0)->nodeValue;
    $title = $xpath->query('./a/img/@alt', $video)->item(0)->nodeValue;
}

Или выполните 4 запроса XPath для всего HTML:

$videos = $xpath->query('//div[contains(@class, "vid")]');
$video_urls = $xpath->query('//div[contains(@class, "vid")]/a/@href');
$thumbs = $xpath->query('//div[contains(@class, "vid")]/a/img/@src');
$titles = $xpath->query('//div[contains(@class, "vid")]/a/img/@alt');

1 Ответ

0 голосов
/ 16 сентября 2018

Запрос DOM реже, как показано во втором примере, должен быть быстрее.Но это не много значит и, в конечном итоге, зависит от ваших требований.Я подозреваю, что реальное время исполнения слов не сильно отличается, не так ли?

Однако, исходя из вашей выборки, у этого подхода есть одна загвоздка: предполагается, что все четыре запроса имеют одинаковое количество результатов и что данный индекс в массиве содержит информацию, удаленную из одного и того же элемента DOM, когда выпозже перебери их.Если это не всегда так, это приведет к разным путаницам.

Первый подход, вероятно, легче понять, и он, вероятно, менее подвержен ошибкам, но сопровождается снижением производительности - имеет ли это значение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...