@mihaguerrero

Парсер. Как быть с динамическими элементами?

Всем привет. Только-только начал изучать php по курсам и решил параллельно пытаться делать парсеры по всяким статьям и видосам. Уже сделал один полностью рабочий парсер для сайта OLX с помощью phpquery. Успехи конечно не абы какие . Довольно просто это было.
Но вот я подошел к такой проблеме как динамические элементы страницы.
Беру страницу случайного интернет магазина из гугла например вот эту:
spoiler
https://y.ua/apple-iphone-6-plus-16gb-space-gray-cpo/p260232/

Включаю F12 в Мозилле и отслеживаю.
При нажатии на картинку с айфоном посылается такой запрос:
spoiler
https://y.ua/_form/catalog/product/gallery/260232?id=450198

В ответ приходит то что мне надо:
spoiler
<div class="lightbox preview" id="popup-catalog-gallery"><h2>Apple iPhone 6 Plus 16GB Space Gray CPO</h2><div class="layout"><div class="slideshow layout"><a href="#" class="btn-prev" title="назад">назад</a><a href="#" class="btn-next" title="вперед">вперед</a><ul class="pagination"><li class=""><img src="/pimg/48x48/15/50/428976.jpeg" width="48" height="48" alt="Apple iPhone 6 Plus 16GB Space Gray CPO"></li><li class=""><img src="/pimg/48x48/8a/75/450195.jpeg" width="48" height="48" alt="Apple iPhone 6 Plus 16GB Space Gray CPO"></li><li class=""><img src="/pimg/48x48/d4/c9/450196.jpeg" width="48" height="48" alt="Apple iPhone 6 Plus 16GB Space Gray CPO"></li><li class=""><img src="/pimg/48x48/b8/bb/450197.jpeg" width="48" height="48" alt="Apple iPhone 6 Plus 16GB Space Gray CPO"></li><li class="active"><img src="/pimg/48x48/66/84/450198.jpeg" width="48" height="48" alt="Apple iPhone 6 Plus 16GB Space Gray CPO"></li></ul><ul class="slideset layout"><li class=""><img src="/pimg/600x600/15/50/428976.jpeg" alt="Apple iPhone 6 Plus 16GB Space Gray CPO" width="600" height="600"></li><li class=""><img src="/pimg/600x600/8a/75/450195.jpeg" alt="Apple iPhone 6 Plus 16GB Space Gray CPO" width="600" height="600"></li><li class=""><img src="/pimg/600x600/d4/c9/450196.jpeg" alt="Apple iPhone 6 Plus 16GB Space Gray CPO" width="600" height="600"></li><li class=""><img src="/pimg/600x600/b8/bb/450197.jpeg" alt="Apple iPhone 6 Plus 16GB Space Gray CPO" width="600" height="600"></li><li class="active"><img src="/pimg/600x600/66/84/450198.jpeg" alt="Apple iPhone 6 Plus 16GB Space Gray CPO" width="600" height="600"></li></ul></div></div></div><script type="text/javascript">
	console.log("img: 450198");
	
	$('#popup-catalog-gallery div.slideshow').fadeGallery({
		slides: '.slideset > li',
		pagerLinks: '.pagination li',
		event: 'click',
		useSwipe: true,
		autoRotation: false,
		switchTime: 3000,
		animSpeed: 500,
		autoHeight: true
	});

</script>

Если просто вставить в строку браузера запрос
spoiler
https://y.ua/_form/catalog/product/gallery/260232?id=450198
то получаем 404.
Вставляю в "file_get_contents" - то же самое. ((
  • Вопрос задан
  • 397 просмотров
Решения вопроса 1
@d-virt
Вы должны послать запрос с правильными заголовками, для того, что бы Вам вернулся корректный ответ.
Дам подсказку:
использовать curl, требуемый заголовок: X-Requested-With:XMLHttpRequest

https://www.google.ru/search?newwindow=1&q=php+cur...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Попробуйте парсить с помощью phantomjs. Используя его, вы сможете выполнить на целевой странице любые действия, например этот же клик по картинке, и далее достать необходимую вам информацию. Я когда то писал о парсинге с использованием phantomjs небольшую статью в своем блоге.
Ответ написан
AlexMaxTM
@AlexMaxTM
Бывает так, что контент формируется в зависимости от того с какого устройства просматривается сайт. Возможно с айфона есть такая страница, а компа нет.
Парсеры немного не так делаются. Сначала получите куки, которые вам отдает сайт. Наверняка сайт следит за сессией, потому при каждом новом запросе необходимо передавать все куки, что были переданы. Кроме того, не лишним будет передавать и referrer, за этим тоже иногда следят сайты. Будет не лишним для конкретного случая сформировать специальный заголовок, убедив сайт в том, что просмотр ведется именно с айфона.
ИМХО. Curl+регулярные выражения будут работать быстрее чем phpquery. Не знаю как справляется phpquery с невалидным кодом, но если на сайте код невалидный, то могут возникнуть проблемы с поиском нужной информации.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы