English | Русский
PHP-библиотека для парсинга данных Яндекса: организации и места (Яндекс Карты), отзывы (Яндекс Карты), товары (Яндекс Маркет), недвижимость (Яндекс Недвижимость).
Работает через Apify API — запускает акторы и возвращает типизированные DTO.
composer require scraper-apis/yandex-parseruse YandexParser\Client;
$client = new Client('apify_api_ваш_токен');
// Поиск ресторанов в Москве
$places = $client->scrapePlaces(
query: ['ресторан'],
location: 'Москва',
maxResults: 50,
);
foreach ($places as $place) {
echo "{$place->title} — {$place->address}" . PHP_EOL;
echo "Рейтинг: {$place->rating}, отзывов: {$place->reviewCount}" . PHP_EOL;
if ($place->hasContactInfo()) {
echo "Тел: {$place->getFirstPhone()}" . PHP_EOL;
}
}use YandexParser\Language;
$places = $client->scrapePlaces(
query: ['стоматология', 'клиника'],
location: 'Санкт-Петербург',
maxResults: 200,
language: Language::Russian,
options: [
'filterRating' => 4.5,
'filterOpenNow' => true,
'filterCardPayment' => true,
'maxPhotos' => 5,
],
);use YandexParser\ReviewSort;
$reviews = $client->scrapeReviews(
startUrls: ['https://yandex.ru/maps/org/pushkin/1124715036/'],
maxReviewsPerPlace: 100,
reviewSort: ReviewSort::Newest,
minRating: 1,
maxRating: 3,
);
foreach ($reviews as $review) {
echo "{$review->authorName}: {$review->rating}/5" . PHP_EOL;
if ($review->hasBusinessReply()) {
echo "Ответ: {$review->getBusinessReplyText()}" . PHP_EOL;
}
}use YandexParser\MarketSort;
use YandexParser\MarketRegion;
$products = $client->scrapeProducts(
query: 'ноутбук ASUS',
maxItems: 50,
region: MarketRegion::Moscow,
sort: MarketSort::PriceAsc,
options: [
'priceFrom' => 30000,
'priceTo' => 80000,
],
);
foreach ($products as $product) {
echo "{$product->title} — {$product->getPriceFormatted()}" . PHP_EOL;
echo "Продавец: {$product->sellerName}, рейтинг: {$product->rating}" . PHP_EOL;
$discount = $product->getYaBankDiscount();
if ($discount !== null) {
echo "Скидка по Я.Банку: {$discount}%" . PHP_EOL;
}
}use YandexParser\DealType;
use YandexParser\PropertyCategory;
use YandexParser\RealtySort;
$listings = $client->scrapeListings(
location: 'Москва',
dealType: DealType::Sell,
category: PropertyCategory::Apartment,
maxItems: 50,
sort: RealtySort::PriceAsc,
roomsTotal: ['1', '2'],
options: [
'priceMin' => 5000000,
'priceMax' => 15000000,
],
);
foreach ($listings as $listing) {
echo "{$listing->getAddress()} — {$listing->getPriceValue()} ₽" . PHP_EOL;
echo "Площадь: {$listing->getAreaValue()} м², этаж: {$listing->floorsOffered[0] ?? '?'}/{$listing->floorsTotal}" . PHP_EOL;
if ($listing->hasPhones()) {
echo "Тел: {$listing->getFirstPhone()}" . PHP_EOL;
}
if (!$listing->isFromOwner()) {
echo "Агентство: {$listing->getSellerName()}" . PHP_EOL;
}
}| Enum | Значения |
|---|---|
Language |
Auto, Russian, English, Turkish, Ukrainian, Kazakh |
ReviewSort |
Relevance, Newest, Highest, Lowest |
MarketSort |
Default, Popular, PriceAsc, PriceDesc, Rating |
MarketRegion |
Moscow, SaintPetersburg, Yekaterinburg, Kazan, Novosibirsk, NizhnyNovgorod, Samara, RostovOnDon, Krasnodar, Chelyabinsk, Ufa, Perm, Voronezh, Volgograd, Krasnoyarsk, Omsk |
DealType |
Sell, Rent |
PropertyCategory |
Apartment, Rooms, House, Lot, Commercial, Garage |
RealtySort |
Relevance, Newest, PriceAsc, PriceDesc, AreaAsc, AreaDesc, CommissioningDate |
use YandexParser\Client;
use YandexParser\Config;
// Изменить таймаут или базовый URL
$client = new Client('токен', new Config(
apiToken: 'токен',
timeout: 600,
));use YandexParser\Exception\ApiException;
use YandexParser\Exception\RateLimitException;
try {
$places = $client->scrapePlaces(query: ['кафе'], location: 'Казань');
} catch (RateLimitException $e) {
sleep($e->retryAfter);
// повторить запрос
} catch (ApiException $e) {
echo "Ошибка API: {$e->getMessage()}" . PHP_EOL;
}- PHP 8.3+
- Токен Apify API
- 2GIS Parser PHP — парсинг 2ГИС (организации и отзывы, недвижимость, вакансии)
MIT