Nikkorfed
@Nikkorfed
20 лет, веб-разработчик из Екатеринбурга.

Как спарсить выдачу Яндекс.Карт?

Добрый день!

Подскажите пожалуйста, как можно спарсить данные со страницы организации в Яндекс.Картах? В частности, нужно взять данные о рейтинге организации и количестве отзывов у неё. Знаю, что есть некое API по ссылке https://yandex.ru/maps/api/business/fetchReviews (нашел его среди вопросов на этом же портале), но это не совсем то. Там выдаются сами отзывы, а нужно то, что написал выше.

Есть одна проблема — Яндекс рендерит элементы на странице постепенно. Когда парсишь её через Simple HTML DOM, она получается пустой. Как это можно обойти? Ведь наверняка выполняется какой-то скрипт, который обращается к ссылке и получает оттуда все эти данные. Не знаю, как с этим справиться.
  • Вопрос задан
  • 394 просмотра
Решения вопроса 2
@Hellayas
Парсить через Selenium\Puppeteer
Ответ написан
AGorbunoff
@AGorbunoff
Умные сайты на WordPress
Та еще задача: корректно извлекать данные рейтинга организации. Задал вопрос поддержке Яндекса, как это сделать не нарушая правил платформы. Жду ответ и опубликую здесь.

А пока, есть простое решение, извлекать данные посредством PHP шоркода:

<?php 

function rating_function($atts) {
extract(shortcode_atts(array(

  // вставляем ссылку на карточку организации в Яндекс Справочике как есть
  "url" => 'https://yandex.ru/maps/org/<---id организации--->',
), $atts));
  
  $content = file_get_contents($url);
    
	// определяем начало необходимого фрагмента кода, до которого мы удалим весь контент
	$pos = strpos($content, '<div class="orgpage-reviews-view__rating-score">');
 
	// удаляем все до нужного фрагмента
	$content = substr($content, $pos);
 
	// находим конец необходимого фрагмента кода
	$pos = strpos($content, '</div>');
 
	// отрезаем нужное количество символов от конца фрагмента
	$content = substr($content, 0, $pos);
    
  echo $content;
	
	}

add_shortcode('rating', 'rating_function');

?>


Получаем рейтинг в числовом значении и вставляем полученный шорткод куда нужно на сайте: [rating].

P.S.: Только функцию нужно запускать как можно редко;) дабы избежать нагрузки, желательно через периодическое обновление кэша, например, посредством curl закрывая соединение curl_close(); или каждый раз вызывая форму запроса данных в ручную.

Здесь, предлагается одно из решений посредством curl.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FanatPHP
НИКАК.
ВЫ задрали уже любители дармовщинки.
Из-за вас сервисами яндекса уже невозможно пользоваться - он все время показывает капчу, которую хрен прочтешь.
Причем яндекс и так дает на халяву, через апи. Но нет - мы нос воротим, мы лучше будем мелочь по карманам тырить, и гадить всем вокруг.

Попробуй хоть раз в жизни сделать что-то своё, а не пытаться тырить чужое.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы