Господа, нужно спарсить пару каталогов лекарств с сайта eаптека, накидал быстро парсер через курл (заголовки меняю, куки сохраняю), но пока не смог вообще никакой ответа получить с этого сайта — пусто и все.
Подозреваю что там проверка на выполнение JS идет. Можете кто опытный в этом деле посмотреть?
Можно ли на php обойти эту проверку?
vitor
Dram :
Господа, нужно спарсить пару каталогов лекарств с сайта eаптека, накидал быстро парсер через курл (заголовки меняю, куки сохраняю), но пока не смог вообще никакой ответа получить с этого сайта — пусто и все.
Подозреваю что там проверка на выполнение JS идет. Можете кто опытный в этом деле посмотреть?
Можно ли на php обойти эту проверку?
Копай в сторону phantomjs, под пыху есть либа https://jonnnnyw.github.io/php-phantomjs/
PHP PhantomJS
Jonny W
jonnnnyw.github.io
PHP PhantomJS is a flexible PHP library to load pages through the PhantomJS headless browser and return the page response. It is handy for testing websites that demand javascript support and also supports screen captures and PDF output. Feature List Load webpages through the PhantomJS headless browser View detailed response data including page…
drDaemon
Dram :
Господа, нужно спарсить пару каталогов лекарств с сайта eаптека, накидал быстро парсер через курл
Можно ли на php обойти эту проверку?
Вообще с этим сайтом проблем не было особых никогда. Там несколько редиректов на каждом добавляются куки прежде чем контент получишь. … Мы его(в том числе) каждый день парсим уже несколько лет….
И еще, уточни на каком оборудовании запускаешь парсинг — хостинк, сервер, прокси. Это все играет роль.
Dram
drDaemon, я застрял на первом же шаге только начав писать парсер. Создал функцию курла, функцию с разными юзер агентами бразузеров, чтобы при каждом запросе менять его.
Делаю запрос и пусто…. вот собственно и все. Прокси еще даже не покупал ибо и не успел логику парсера прописать.
function getPageByUrl ($url){ //Инициализируем сеанс $curl = curl_init(); //Указываем адрес страницы curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("X-Requested-With: XMLHttpRequest")); //Ответ сервера сохранять в переменную, а не на экран curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //Переходить по редиректам curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
Надо проверить, выполняется ли автоматический редирект curl-ом
но если включен safe_mode то это не сработает.
Поэтому я проверил бы возвращаемый код (301, 302, 307) и если он есть, перезапросил страницу с куками, которые устанавливает текущий запрос.
Или посмотреть что передается в отладочном прокси (Fiddler например)
Если используешь свой ВПС или сервер, то самое простое установить докер, взять контейнер с HeadlessChrome, или еще проще с puppetteer, и через него получать отрендереный html
Upd: Я так понял ты пытаешься сделать AJAX запрос. Попробуй перед ним сделать обычный запрос и использовать его куки.
drDaemon
Dram #:
Все же, нужно использовать HeadlessCrome или Puppetteer. Чисто на PHP не получится с приемлемыми затратами сделать. Там добавлен js который делает разные проверки…
Dram
Господа, нужно спарсить пару каталогов лекарств с сайта eаптека, накидал быстро парсер через курл (заголовки меняю, куки сохраняю), но пока не смог вообще никакой ответа получить с этого сайта — пусто и все.
Подозреваю что там проверка на выполнение JS идет. Можете кто опытный в этом деле посмотреть?
Можно ли на php обойти эту проверку?
vitor
Господа, нужно спарсить пару каталогов лекарств с сайта eаптека, накидал быстро парсер через курл (заголовки меняю, куки сохраняю), но пока не смог вообще никакой ответа получить с этого сайта — пусто и все.
Подозреваю что там проверка на выполнение JS идет. Можете кто опытный в этом деле посмотреть?
Можно ли на php обойти эту проверку?
Копай в сторону phantomjs, под пыху есть либа https://jonnnnyw.github.io/php-phantomjs/
drDaemon
Господа, нужно спарсить пару каталогов лекарств с сайта eаптека, накидал быстро парсер через курл
Можно ли на php обойти эту проверку?
Вообще с этим сайтом проблем не было особых никогда. Там несколько редиректов на каждом добавляются куки прежде чем контент получишь. …
Мы его(в том числе) каждый день парсим уже несколько лет….
И еще, уточни на каком оборудовании запускаешь парсинг — хостинк, сервер, прокси. Это все играет роль.
Dram
drDaemon, я застрял на первом же шаге только начав писать парсер. Создал функцию курла, функцию с разными юзер агентами бразузеров, чтобы при каждом запросе менять его.
Делаю запрос и пусто…. вот собственно и все. Прокси еще даже не покупал ибо и не успел логику парсера прописать.
Dram
Пропустил там строку
drDaemon
Надо проверить, выполняется ли автоматический редирект curl-ом
но если включен safe_mode то это не сработает.
Поэтому я проверил бы возвращаемый код (301, 302, 307) и если он есть, перезапросил страницу с куками, которые устанавливает текущий запрос.
Или посмотреть что передается в отладочном прокси (Fiddler например)
Если используешь свой ВПС или сервер, то самое простое установить докер, взять контейнер с HeadlessChrome, или еще проще с puppetteer, и через него получать отрендереный html
Upd:
Я так понял ты пытаешься сделать AJAX запрос. Попробуй перед ним сделать обычный запрос и использовать его куки.
drDaemon
Все же, нужно использовать HeadlessCrome или Puppetteer. Чисто на PHP не получится с приемлемыми затратами сделать. Там добавлен js который делает разные проверки…