Парсит только первые 2 страницы

173
08 сентября 2018, 20:50

Пытаюсь научится делать парсеры. Сейчас с помощью библиотеки phpquery делаю простенький парсер. Не получается пройтись дальше 2 страниц каталога чтобы вытащить артикул и цену на товар. Парсит 2 страницы и цикл запускается снова. Дублирует 2 страницы по несколько раз. Прикрепляю свой код. Помогите, пожалуйста, разобраться в том, что я записал не так. Заранее спасибо за ответ!

<?php  
 header('Content-type: text/html; charset=utf-8'); 
 
 require 'phpQuery-onefile.php'; 
 
function parser ($url,$start,$end) { 
 
	if ($start < $end) { 
	 
		$file = file_get_contents($url); 
		$doc = phpQuery::newDocument($file); 
 
			foreach ($doc->find('.product-list') as $position) { 
				$position = pq($position); 
 
				$articul = $position->find('.name > span:even(1)')->text(); 
				$price = $position->find('.actions .price')->html(); 
 
				// echo "<link rel='stylesheet' href='style.css'>"; 
				echo '<pre>';  
				print_r($articul); 
				print_r($price); 
				echo '</pre>';	 
			} 
				$next = $doc->find('.pagination li a')->attr('href'); 
 
		if ( !empty($next) ) { 
			$start++; 
			parser($next, $start, $end); 
		} 
	}	 
} 
 
 
 
$url = "https://www.agro-center.com.ua/combines-a/spare-parts-for-grain-harvesters/john-deere-c/"; 
$start = 0; 
$end = 4; 
parser($url,$start,$end); 
 
phpQuery::unloadDocuments();

Answer 1

Просто вы не правильно ищите следующую страницу, вы берете первую ссылку в пагинации, а на второй странице: первая ссылка будет на первую страницу (обратно). Поэтому у вас всегда и получается 1-2-1-2-1-2...

Решение:

$next = $doc->find('.pagination li a')->attr('href');

Замените на:

$next = $doc->find('.pagination .active')->next()->find('a')->attr('href');

Тут мы берем первую ссылку после активного блока, т.е. на следующую страницу.

READ ALSO
WP_Query последующая обработка результатов

WP_Query последующая обработка результатов

На странице вывожу произвольные посты циклом WP_QueryНеобходимо получить все посты с определенными параметрами, а уже потом выполнить подсчет...

174
спарсить рейтинг wta (php)

спарсить рейтинг wta (php)

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

206
Преобразовать br в p

Преобразовать br в p

Как с помощи php переносимую строку преобразовать в параграф

164
WP_Query в аргументах мета поле с массивом

WP_Query в аргументах мета поле с массивом

Речь о произвольном типе постовЕсть переменная, содержащая некое число, например

234