#php #ajax #angularjs #http #парсер
Получить содержимое страницы на PHP.
Раньше я делал это достаточно легко через file_get_contents( $url ). Но на одном
сайте список товаров грузится ajax-om, точнее ангуляром.
То есть если открыть такую страницу в браузере, у вас будет крутиться лоадер
и через некоторе время появятся товары.
Функция file_get_contents( $url ) получает сырой код, то есть типа
{{tovari.name}}
Как получить обработанное( загруженное ) содержимое страницы?
Ответы
Ответ 1
Попробуйте подключиться через curl к нужной странице, должно сработать, например:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($curl)
curl_close($curl);
Ответ 2
Вам может помочь phantomjs.
Через метод evaluate вы получите контекст загруженной страницы, а дальше можете либо
качать всю страницу, либо весь арсенал JS селекторов у вас в руках. Пример взят с офф.
сайта:
var webPage = require('webpage');
var page = webPage.create();
page.open('http://m.bing.com', function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log(title);
phantom.exit();
});
Ответ 3
С помощью библиотеки CURL это возможно. Недавно сайт парсил где все на ajax и с библиотекой
jQuery. Так если парсишь с помощью curl и потом выводим в браузер, то будет все криво,
потому-что клиент в данный момент CURL(сервер), а не Вы. Кроссдоменный запрос не прокатит
поэтому нужно взять к примеру библиотеку Simple HTMLDOM
$curl = curl_init();
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // allow redirects
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // times out after 4s
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // return into a variable
curl_setopt($curl, CURLOPT_URL, "https://ya.ru/");
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1;
ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6");
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($curl);
Выводить $data не нужно. Всё, ваш клиент (сервер) получил страницу. Теперь скачиваем
http://simplehtmldom.sourceforge.net/ И есть инструкция например здесь http://zubuntu.ru/php-simple-html-dom-parser/
То есть нам нужно продолжить так:
$html=str_get_html($data);
$result=$html->find(div.spisok span); //получаем массив
Дальше его перебираем.
foreach ($result as $one){
echo $one; //можем уже выводить то, что нашли
}
По такому принципу ищем данные, перебираем их. Важно точно определить "координаты"
данных.
Ответ 4
Ну тут же все тоже самое загружаете инструмент разработчика , в любом браузере .
В хроме и ему подобных (опера , яндекс , рамблер итд) он встроеный в мозиле firebug
смотрите что грузится у вас после загрузки страницы , берете этот url подставляете
свои параметры и тем же file_get_contents качаете контент
Ответ 5
В хроме я использую расширение https://chrome.google.com/webstore/detail/quick-source-viewer/cfmcghennfbpmhemnnfjhkdmnbidpanb?utm_source=chrome-app-launcher-info-dialog
После загрузки страницы и отработки скриптов можно посмотреть результат со всеми
изменениями.