[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Parsing lvl2
alex2015
Добрый день. Как и бывает можно спарсить несколько сайтов, а на одном зависнуть на долго.
Попался мне сайт, с которым вожусь уже дня 4. (В силу знания-не знания языка наверно).
Итак.
Если в адресной строке браузера писать Хttp://****.**/communication/cell/#?p=2 (3,4,5 и .тд.) то браузер адекватно переходит по ссылкам. Выводится необходимый список товаров. Если же писать на php curl, то перехода не происходит и всегда происходит считывание с первой страницы (Хttp://****.**/communication/cell/).

Внизу списка товаров на первой странице есть ссылки "1,2,3 и т.д.", т.е. переход по страницам.
при изучении кода элемента (т.е. этих ссылок на страницы) происходит вот что
Хttp://***.**/communication/cell/?ajaxAction=appendModelsList&forceListing=1&order=popularit y&order-default=1&p=2&pics=1
метод Get.
Т.е. можно прочитать заголовки, куки, response. При изучения поля респонс, в нем, я так понял, находится нужная мне информация, но она закодирована. Видимо Аякс должен отослать ее в пхп на перекодировку.

Я пробовал curl запрос и с куками, и без и т.д. и .т.п. Не получается.
Либо я вообще не правильно понял проблему, либо я просто не знаю (и не знаю как узнать) куда и как отправить этот самый респонс.
sergeiss
Наличие "ajaxAction" наводит на мысль, что там просто "тупо" идет подгрузка данных аяксом, уже после загрузки страницы. И, соответственно, курл тут не поможет. Надо файлы JS анализировать, я думаю. Сначала просто с целью понять, что там происходит. А потом уже думать, что делать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Bolik
если файл подгружается аяксом, то  firebug вам в помощь. там все xhr запросы можно посмотреть.

а вообще если после загрузки страницы происходит переадресация, а в курл нет, то может у вас нет curlopt_followlocation?
alex2015
Так и есть, там работает Аякс (я видимо не донес эту мысль). Он подгружает частями контент.
Произвел анализ аякса. То, что он отправляет, и что получает.
Есть его хеадер, куки и непонятное мне поле "queryString".

Не очень понимаю что с этим аяксом делать, если не отсылать его информацию curl'ом (возможно я бред несу?).
AllesKlar
Курл работает на сервере.
Аякс в браузере.

Тебе нужно:
1. получить курлом страницу
2. посмотреть, какие запросы шлет аякс.
3. отправить эти запросы курлом, используя данные, полученные из п. 1

_____________
[продано копирайтерам]
slobotsky.denis
alex2015
Отправляй курлом запрос аналогичный тому, который делает ajax.

Цитата (alex2015 @ 11.03.2015 - 21:56)
При изучения поля респонс, в нем, я так понял, находится нужная мне информация, но она закодирована.

Как изучал? Покажи пример response.

P.S.: проще использовать PhantomJS или Selenium, чем париться с эмуляцией аякса курлом.

_____________
PHP: The Right Way
Бесплатное обучение Symfony2

Tox: 55BB67DE54B1CB14F8C37B4F3AED64E6A45922988D22F85EF75039751F26F05460664D978F5C
sergeiss
Цитата (AllesKlar @ 12.03.2015 - 15:52)
1. получить курлом страницу
2. посмотреть, какие запросы шлет аякс.
3. отправить эти запросы курлом, используя данные, полученные из п. 1

Эдак он свой браузер сделает в итоге smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
alex2015
Ок, перейдем непосредственно к примерам:
1) AllesKlar. Так и делаю. Непонятна только строка ""queryString". (как и что отправляется см. ниже.)
2)slobotsky.denis в хром браузере "просмотр кода элемента", потом нажимал на "следующая страница", смотрел что происходит. Отловил Аякс, нажал на него. Там все есть от хеадеров до куки. Вот часть респонса:

{"hasNextPage":true,"appendModelsListUrl":"http:\/\/***.*** (это я исправил)ru\/communication\/cell\/?ajaxAction=appendModelsList&forceListing=1&order=popularity&order-default=1&p=3& amp; amp; amp;pics=1&render=appendModelsList","listing":"\n<div class=\"grid-row vertical-margins-32\">\n \n \n \n<div itemprop=\"itemListElement\" itemscope itemtype=\"http:\/\/schema.org\/Product\"\n data-model-block-42=\"145138160\"\n class=\"column-1-of-5 catalog-pics-item wa-path model\"\n data-wa-name=\"11\/1\">\n\n\n <div class=\"catalog-pics-item-body\">\n\n <div class=\"catalog-pics-item-image\">\n <div class=\"catalog-item-shields\">\n <\/div>\n "}
Name
Path
И.т.д. т.е это похоже на каталог, только не обработанный.


З.Ы. PhantomJS или Selenium, возьму на вооружение.
3)Способ отправки:


$Link='http://***.ru/communication/cell/#?mode=list'; //Заходим на 1 страницу со списком
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,$Link);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);

curl_setopt($curl_handle, CURLOPT_HEADER, 1);

curl_setopt($curl_handle, CURLOPT_COOKIEJAR,'Wcookie.txt');
curl_setopt($curl_handle, CURLOPT_COOKIEFILE,'Wcookie.txt');

curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Chrome/40.0.2214.115');
$data = curl_exec($curl_handle);



$Link='http://****.ru/communication/cell/#?mode=list&p='.$PageCounter; // след страница
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,$Link);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_COOKIEFILE,'Wcookie.txt');
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $this_header); // тут hear аякса.
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Chrome/40.0.2214.115');
curl_close($curl_handle);


Непонятно где отправлять "queryString".


CURLINFO_EFFECTIVE_URL) тот который мы указали
CURLINFO_HTTP_CODE) в обоих случаях 200
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.