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

Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля
Получить курс сейчас!
Разработка веб-приложения на PHP
Скачайте видеокурс и узнайте, как создать веб-приложение на PHP
Скачать
Здравствуйте )
Хотел спросить а как парсить страницу если туда контент загружается Ajax’om ?
Здравствуйте)
Изучить ajax-запрос, который является ни чем иным, как POST или GET запросом с параметрами или без, и выполнить точно такой же запрос с такими же параметрами. Вот и все)
Спасибо )
Пожалуйста)
НАписал парсер но при парсинге возникает ошибка!
Сайт донора выдает мне 503 Ошибку:
Service Temporarily Unavailable
You have made too many requests per second.
Используйте функцию sleep после каждого запроса.
Спасибо не дождался вашего ответа то таки решил сделать )
Спасибо что подтвердили мои догадки !)
Пожалуйста
Привет!!! Часто пользуюсь видеоуроками webformyself, и вот решил оставить комментарий по теме в которую погрузился на практике.
Если открывать соединение для рекурсивного парсинга — не лучше ли создать сингтон для курлинит. Например так?
class Parser{
private static $ch = null;
public static function getInstance() {
if (self::$ch != null) {
return self::$ch;
}
return new self;
}
private function __construct() {
self::$ch = curl_init();
curl_setopt(self::$ch, CURLOPT_RETURNTRANSFER, true);
}
public function set($name, $value) {
curl_setopt(self::$ch, $name, $value);
return $this;
}
public function exec($url) {
curl_setopt(self::$ch, CURLOPT_URL, $url);
return curl_exec(self::$ch);
}
public function __destruct() {
curl_close(self::$ch);
}
}
А потом в рекурсии вызывать $html = Parser::getinstans
Если бы я точно был в этом уверен то не спрашивал бы, но я точно не знаю и хотел бы узнать Ваше мнение?
Здравствуйте, Владимир! Можно, конечно же
Могу ошибаться, но мне кажется, что в уроке я что-то и говорил о синглтоне (хотя могу путать с каким-то другим уроком). Если бы серия продолжалась, тогда синглтон я бы, скорее всего, добавил.
Спасибо за ответ.
И еще, очень бы хотелось в разрезе этой темы узнать про более сложные алгоритмы парсинга. Дело в том что последнее время очень много сайтов используют подгрузку динамического контента без использования АЯКСА. И хоть фидлер никто не отменял, но иногда для вывода контента на одной страничке уходит так много запросов что работа курлами превращается сущий АД.
На помощь конечно приходит Node.js и Nightmare (Electron), и в этой связке у меня легко получается автоматизировать автоматичесую авторизацию на таких ресурсах как mail.ru или яндекс для последующего парсинга или автоматической отправки писем. Кстати к слову недавно или маилру или рамблер начали блокировать такие алгоритмы но сейчас не про это.
Я больше люблю php и мне бы хотелось увидеть пример связки -> php скрипт который запускает node.js файл -> node.js файл открывает страничку которую будем парсить с помощью Nightmare (делает там все необходимые действия, переходы и авторизации…) -> потом результат помещается в переменную и отправляется в первоначальный php скрипт где идет его обработка phpQuery и дальше отправляться в Mysql
Сейчас мне приходиться это все делать по отдельности, а до совмещения этих действий в один алгоритм у меня руки не дошли.
Понимаю, что это специфическая тема и скорее всего на это у Вас не будет времени. Но, возможно если бы я сделал такой алгоритм САМ и соответственно видеоуроки (2 — 3 урока), Вы бы их выложили на Вашем ресурсе?
Можете написать в нашуслужбу поддержки . Если уроки будут хорошего качества и изложение материала нам подойдет, тогда можем попробовать опубликовать их.
Пример очень наглядный, но не понятен один нюанс. А именно, при первом запросе на авторизацию отправляются данные CURLOPT_POSTFIELDS.
1) при последующих запросах для парсинга url будут ли прикрепляться CURLOPT_POSTFIELDS они же были установлены (…$parser->set(CURLOPT_POSTFIELDS… )?
2) Если всё же отправляются, то как их исключить из запросов после удачной авторизации?