Как распарсить "зашифрованную" страницу

kapusta77
На сайте с 31.07.2014
Offline
61
1637

Здравствуйте!

Мне надо распарсить таблицу https://stat.top100.rambler.ru/projects/735379/report/today/

Столкнулся с проблемой: в исходном коде страницы нет нужных мне опорных html-тегов.

Подскажите, пожалуйста, как это сделать?.... в каком направлении копать?

ДП
На сайте с 23.11.2009
Offline
203
#1

копать в направлении вкладки network в средставх разработчика.

Там раскопать вот такой урл https://stat.top100.rambler.ru/api/v1.0/project/735379/today

TF-Studio
На сайте с 17.08.2010
Offline
334
#2

selenium//

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
kapusta77
На сайте с 31.07.2014
Offline
61
#3

Круто!

Спасибо, Дикий пионер!

kapusta77
На сайте с 31.07.2014
Offline
61
#4

Подниму свою старую тему.

Столкнулся с новой проблемой:

- Надо распарсить страницу https://www.linkpad.ru/?search=avto.ru

значение "Доноры" в правой колонке.

- Контент тоже генерируется в скриптах javascript

- Через network в инструментах разработчика не смог найти запрос, по которому подгружают данные.

Прошу помочь.

ДП
На сайте с 23.11.2009
Offline
203
#5

По клику на "доноры" грузится вот эта страница https://www.linkpad.ru/default.aspx?r=4&i=avto.ru - это видно во вкладке network

Там в html есть искомая табличка.

kapusta77
На сайте с 31.07.2014
Offline
61
#6

Дикий пионер, спасибо, что откликнулся!

Получается, задача свелась к отправке ajax-запроса из php curl.

Делаю так:

1) Отправляю запрос на поиск по домену, чтобы получить куки.

2) Делаю ajax-запрос с полученной кукой (остальные заголовки копирую из хрома).

В итоге:

Приходят "кракозябры", в хроме менял кодировку - ничего не подходит.

Ниже я приложил код, в чем может быть ошибка?


// Делаю поиск по домену, чтобы получить cookies
$ch = curl_init('https://www.linkpad.ru/?search=avto.ru');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);

$result = curl_exec($ch);

preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = implode("; ", $matches[1]);

curl_close($ch);


// Делаю ajax-запрос с полученной cookie
$headers = [ "Accept: text/html, */*; q=0.01",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",
"Connection: keep-alive",
"Content-Length: 0",
"Content-Type: application/x-www-form-urlencoded",
"Cookie: " . $cookies,
"Host: www.linkpad.ru",
"Origin: https://www.linkpad.ru",
"Referer: https://www.linkpad.ru/?search=avto.ru",
"User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
"X-Requested-With: XMLHttpRequest",
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.linkpad.ru/default.aspx");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "r=3&i=avto.ru");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

echo $result;

curl_close($ch);
ДП
На сайте с 23.11.2009
Offline
203
#7

Прогони крякозябры, которые тебе приходят черед декодер https://www.artlebedev.ru/tools/decoder/

А потом в скрипт допиши конвертацию в нужную тебе кодировку через функцию iconv()

kapusta77
На сайте с 31.07.2014
Offline
61
#8

Погуглил, ошибка была в том, что я в заголовке указал, что принимаю сжатые данные gzip.

Я закомментировал строчку:

"Accept-Encoding: gzip, deflate, br"

Теперь приходит ответ в html, но там нет нужных мне данных, в исходном коде полученной страницы:

<div class="nodisplay"><span id="loading">

Загрузка...</span></div>

Видимо, данные подгружаются постепенно.

---

Что еще попробовать?.. как получить данные?

ДП
На сайте с 23.11.2009
Offline
203
#9

Ну вы проверьте во вкладке network - там есть preview того, что вернул сервер. Я лично вижу там табличку с донорами.

У вас, кстати, post-запрос и параметры передаются тоже через post, а на самом сайте - через адрес страницы. Попробуйте так же сделать, может в этом проблема?

kapusta77
На сайте с 31.07.2014
Offline
61
#10
Дикий пионер:

У вас, кстати, post-запрос и параметры передаются тоже через post, а на самом сайте - через адрес страницы. Попробуйте так же сделать, может в этом проблема?

Вы правы! Сделал так:


curl_setopt($ch, CURLOPT_URL, "https://www.linkpad.ru/default.aspx?r=3&i=avto.ru");

Пришла нужная страничка.

Спасибо!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий