Парсить иcходник страницы после всех манипуляций JS с DOM
В таблицу с помощью js(Ajax) при загрузке страницы сразу подгружаются данные(их и нужно спарсить). Если просмотреть исходный код страницы, то данных там нет. Понятно, что они подгружаются динамически и уже на клиентской стороне.
Вопрос, как парсить? Я нашел статью, где описывается как написать плагин к хрому на jQuery, который вроде бы может сначала получить исходник, потом выполнить все js скрипты и дать возможность рыться в сформированном документе. Сделал все как там написано - не работает. Данных нет. К Selenium боюсь прикасаться, потому что чувствую, не разберусь в нем. Пытался разобраться откуда именно подгружаются данные, нашел обфусцированный js на 26 тыс. строк кода, который очевидно этим и занимается, однако там черт ногу сломит - я не смог разобраться. Подскажите пожалуйста, как мне лучше(проще) поступить? |
инструменты разработчика есть в любом браузере сейчас
|
Спасибо, не помогло.
|
Цитата:
|
Если данные подгружаются ajax, то спрашивается на кой хрен их вообще парсить ?
Что мешает получить данные через ajax сразу и обойтись вообще без парсера ??????? |
Я уже не уверен что подгрузка идет именно через ajax. FireBug не отлавливает это. Скорее всего все манипуляции идут в основном скрипте на 26 тыс. строк. Разобраться откуда берутся данные в нем чрезвычайно сложно.
Что касается изучить возможности браузеров и т.д. - к сожалению времени на это сейчас нет. В инете нет норм. примеров. Один правда есть, но автор видимо больше теоретик, чем практик, и впечатление такое что никто такого никогда не делал. Мне достаточно примера получения исходника (конечного) через расширение любого браузера. Со всем остальным разберусь |
Цитата:
Цитата:
если не умеете пользоваться отладчиками, кидайте сюда ссылку на страницу, где этот скрипт находится |
кинь адрес сайта, точнее страницы которую надо пропарсить
|
|
Цитата:
данные забираются отсюда, и они приходят в ввиде шифра. wss://oppush.livesport.eu/WebSocketConnection-Secure |
ну а что если парсить, при помощи php ?.
если парсить ручками, раз в день или раз в неделю :) <? $ch = curl_init (); // инициализация curl_setopt ($ch , CURLOPT_URL , "http://www.oddsportal.com/soccer/armenia/premier-league-2010/results/page/2/"); curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0"); // каким браузером будем прикидываться curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); // вывод страницы в переменную $content = curl_exec($ch); // скачиваем страницу curl_close($ch); // закрываем соединение echo $content; ?> <script> setTimeout(function(){ alert("Привет я внедрённый скрипт, когда страница будет открыта я извлеку все понравившиеся мне данные"); },1000) </script> если хочешь чтобы парсилось при открытии страницы пользователем. <? $ch = curl_init (); // инициализация curl_setopt ($ch , CURLOPT_URL , "http://www.oddsportal.com/soccer/armenia/premier-league-2010/results/page/2/"); curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0"); // каким браузером будем прикидываться curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); // вывод страницы в переменную $content = curl_exec($ch); // скачиваем страницу curl_close($ch); // закрываем соединение ?> <iframe id="content" style="display:hidden;"> <?=$content ?></iframe> //вот здесь твой сайт //бла бла бла <script> setTimeout(function(){ alert("Привет я скрипт, когда страница будет открыта я извлеку все понравившиеся мне данные из фрэйма content и вставлю их в свой сайт"); },1000) </script> Разьясню как работает и почему. 1)сначало курл на сервере получает страницу которую надо распарсить 2) затем генерируется html, контент с вражеского сайта вставляется в фрейм. Фрейм очень важно создан на нашей странице и никакой связи с кросс доменными запросами неимеет 3) страница уходит на браузер 4) в фрейме отработают скрипты с вражеского сайта 5) наш скрипт заберёт из фрейма всё что захочет, проблем с этим небудет так как для создания в браузере кросс доменного запроса небыло. Эту операцию как вы помните мы проделали на сервере в первом шаге, и браузер о ней конечно нечего не знает На самом деле PHP используется лишь как один из способов решения кроссдоменного ограничения, думаю контент можно вставить в фрейм любым другим из доступных способов, просто этот на мой взгляд самый изящный :D kpps67 |
Спасибо, интересный подход с iframe'ом :-)
Однако уже реализовал парсер на PhantomJS. Работает.) Спасибо всем за помощь. |
|
Часовой пояс GMT +3, время: 13:29. |