@alexwprof

Php Query + Curl + Пагинация Как спарсить страницы с пагинацией?

Необходимо для начала организовать парсинг информации из поисковика google. Всё написано и всё почти работает.
Есть код, на других сайтах он проходит пагинацию. На гугле нет. В коде мы по селектору получаем элементы страницы и делаем уже что-то с ними. Сейчас я вывожу на экран, чтобы видеть результат.

public function pagination($url, $start, $end){
        //Получение данных на странице с пагинацией
        if ($start < $end) {
            $file = file_get_contents($url);
            $doc = phpQuery::newDocument($file);
            foreach ($doc->find('#res') as $art) {
                $art = pq($art);
                $this->range = $art->find('#search');

                echo '<hr>';
            }

            $next = 'https://www.google.com' . $doc->find('#nav a')->next()->attr('href');
            var_dump($next);
            if (!empty($next)) {
                $start++;
                $this->pagination($next, $start, $end);

            }

        }

    }

Строчка $next = 'https://www.google.com' . $doc->find('#nav a')->next()->attr('href'); отвечает за поиск нового элемента в пагинации. Но если вардампнуть переменную $next, она окажется пустая, аттребут href не получен.
Если убрать из строки next(), переменная будет получать нужное количество ссылок из пагинации и получит элементы со второй страницы.
Может кто знает аналог метода next() PhpQuery? Так как, повторюсь, код рабочий, но именно на гугле next() всё ломает. В результате мне нужно пройтись по пагинации и спарсить страницы.
  • Вопрос задан
  • 1117 просмотров
Решения вопроса 1
zorba_buddha
@zorba_buddha
IT
загружаем html как xml
DOMDocument::loadHTML - Загрузка HTML из строки
потом используем XPath для поиска необходимого
DOMXPath::query - Выполняет заданное XPath выражение
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Приблизительно вот так:

/* Находим ссылку на следующую страницу */
    $next_page = pq($doc)->find('li.pagination__item--next > a')->attr('href');
    $next_url = $base_url . $next_page;


    /* Проверяем, есть ли следующая страница */
    if (!empty($next_page)){
        sleep(5);
        urls_parser($next_url);
    }


Проверяйте есть ли ссылка на следующую страницу и, если есть, передавайте ее значений в URL для парсинга и запускайте заново.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 11:20
1000 руб./за проект
25 апр. 2024, в 11:02
5000 руб./за проект
25 апр. 2024, в 10:42
150000 руб./за проект