Нужно парсить страницу http://ru.savefrom.net/ Беру ссылку какого-нибудь видоса с Ютуба, собираю полную ссылку, например: http://ru.savefrom.net/#url=https://www.youtube.com/watch?v=vR3EeO2OVhI Результат отображается в блоке <div id="main">, но вывод идет через javascript. Ручками в браузере все выводится, а вот cURL вместо полезной информации выдает: Код (Text): <div id="main"> <noscript><div class="wrapper"><p class="javascript-error">SaveFrom.net использует JavaScript для отображения информации. Пожалуйста, включите JavaScript и обновите эту страницу.</p></div></noscript> Вопрос: как можно сказать данному сервису, что у меня включен javascript и получить результат работы скрипта в блоке <div id="main"> для дальнейшего его парсинга? Средствами cURL это возможно? Может нужно что-то другое применить? Сейчас функция получения кода страницы выглядит так: Код (Text): <?php function get_web_page( $url ) { $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14"; $ch = curl_init( $url ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } $url_1 = "http://ru.savefrom.net/#url=https://www.youtube.com/watch?v=vR3EeO2OVhI"; $result = get_web_page("$url_1"); $page_1 = $result['content']; file_put_contents('page.txt',$page_1);
cURL не умеет выполнять js, он не строит dom-модель документа и прочие вещи. Он тупа считывает инфу по протоколу, и отдаёт её тебе
Без понятия, если честно. Глянул сейчас во вкладке network результаты ajax-запроса, который выполняет savefrom.net, там тоже жётский JavaScript, видимо для защиты от таких, как ты Читал где-то предложение запускать из скрипта браузеры типа lynx и из них как-то получать результатирующее dom-дерево Добавлено спустя 4 минуты 9 секунд: Может организовать скачивание с ютубы через другие средства? Вот, к примеру, чего я нарыл: https://github.com/jeckman/YouTube-Downloader
ты хочешь тупо предоставлять те же услуги, что и тот сайт, его силами, под видом своего? =) ах ты проказник.
В целом да, но немного в другом формате и с дополнительным функционалом. А так же кэшированием запросов и постепенной индексацией полученных результатов. Я бы с удовольствием сделал свой парсер, но уже голову сломал при разгадывании Ютубовских ссылок и ссылок в Яндекс музыке, с менее именитыми сервисами все проще и в принципе получается. Вообще нерешаемых задач нет и со временем все равно напишу свой парсер. А пока для ускорения появления своего сервиса хотел вот ресурсами выше приведенного сайта воспользоваться.
Скачал все файлы, сложил так же, как по вашей ссылке. Не работает. Картинки от видео находит. А прямых ссылок не дает. Пишет размер видео 0Kb. Не через index.php ни через getvideo.php не получаю прямую ссылку. Тут прочитал в подобно вопросе, что нужно проанализировать, какого вида и на какой адрес отправляется ajax запрос, эмулировать эти действия и парсить ответ. Какими средствами можно эмулировать эти действия? Да и проанализировать хз как, там такая каша в коде saveform
Эмулировать тем же курлом - узнать, куда идёт ajax-запрос, послать туда же свой, посмотреть что вернёт. В вашем случае не вариант, поскольку вернёт http://clip2net.com/s/iRAsof, и разобрать это не реально. Говорю же, ради защиты от таких, как ты сделано Есть вариант, найти в исходниках JS, что оно потом с этим делает и сделать тоже самое. Ну тот код не мой, раз не работает, я бы поискал что-то ещё в сети для ютубы Добавлено спустя 12 минут 56 секунд: На том же phpClasses куча классов для реализации этой задачи с ютубой - авось хоть один, да сработает