Задать вопрос
@shido21412

Парсинг поисковой выдачи яндекс карт ajax (в целях совершенствования навыков). как исправить ошибку?

у меня есть скрипт посылающий запросы на ajax апи точку яндекса
params = {
                "add_type": "direct",
                "ajax": "1",
                "direct_page_id": "670942",
                # -- начинаем добавлять недостающие поля:
                "experimental_business_show_exp_features[0]": "cbrf",

                # Блок internal_pron[...]:
                "internal_pron[businessDiscovery]": "true",
                "internal_pron[centralBankCollaboration]": "true",
                "internal_pron[directPoi]": "true",
                "internal_pron[directPoiBeltSize]": "0",
                "internal_pron[directPpoiCollisionPriority]": "low",
                "internal_pron[directPpoiLoadingPriority]": "high",
                "internal_pron[flyoverAttractionsMskSpb]": "true",
                "internal_pron[flyoverRealtyPopup]": "true",
                "internal_pron[friendsSuggestInReviewsButton]": "blue",
                "internal_pron[friendsSuggestInReviewsPosition]": "4",
                "internal_pron[poiRTContext]": "poisearch",
                "internal_pron[tile3dPing]": "true",
                "internal_pron[ugcFriendsSuggestSubscribers]": "true",
                "internal_pron[vectorPpoiCollisionPriority]": "high",
                "internal_pron[vectorPpoiLoadingPriority]": "high",
                "internal_pron[vectorRichModelsEnabled]": "true",
                "internal_pron[vectorRichPointsEnabled]": "true",
                "internal_pron[vectorVmap3]": "true",

                "lang": "ru_RU",
                "ll": f"{lon},{lat}",
                "origin": "maps-form",
                "results": str(search_count),

                # s=... (часто бывает какое-то случайное число, в вашем примере 2628136381)
                "s": "2628136381",

                # sessionId
                "sessionId": self.session_id,
                "snippets": (
                    "masstransit/2.x,panoramas/1.x,businessrating/1.x,businessimages/1.x,"
                    "photos/2.x,videos/1.x,experimental/1.x,subtitle/1.x,visits_histogram/2.x,"
                    "tycoon_owners_personal/1.x,tycoon_posts/1.x,related_adverts/1.x,related_adverts_1org/1.x,"
                    "city_chains/1.x,route_point/1.x,topplaces/1.x,metrika_snippets/1.x,place_summary/1.x,"
                    "online_snippets/1.x,provider_data/1.x,service_orgs_experimental/1.x,business_awards_experimental/1.x,"
                    "business_filter/1.x,histogram/1.x,attractions/1.x,potential_company_owners:user,pin_info/1.x,"
                    "lavka/1.x,bookings/1.x,bookings_personal/1.x,trust_features/1.x,plus_offers_experimental/1.x,"
                    "discovery/1.x,toponym_discovery/1.x,relevant_discovery/1.x,visual_hints/1.x,"
                    "matchedobjects/1.x,topobjects/1.x,org_offer/2.x,hotels_booking/1.x,stories_experimental/1.x,"
                    "ugc_friends_likes/1.x,fuel/1.x,realty_experimental/2.x,hot_water/1.x,neurosummary,"
                    "mentioned_on_site/1.x,showtimes/1.x,afisha_json_geozen/1.x,realty_buildings/1.x,"
                    "media_flow_stories_content/1.x"
                ),

                # spn, test-buckets (можно оставить ваши или взять из эталона)
                "spn": "0.000086,0.039207",  # как в рабочем запросе

                # text
                "text": f"{request} {city}" if city else f"{request}",

                # по эталону yandex_gid=11, z=14
                "yandex_gid": "11",
                "z": "14",
                }

            # Если есть актуальный csrf_token, добавляем и в заголовок, и в params
            if self.csrf_token not in (None, ""):
                auth_headers["X-Csrf-Token"] = self.csrf_token
                params["csrfToken"] = self.csrf_token  # <-- важно

            url = "https://yandex.ru/maps/api/search"

изначально он получает куки карт, авторизации профиля яндекс и т.д. затем подставляются типичные параметры а после и мой поисковой запрос и координаты.

при первом запросе - логично прилетает новый crsf - токен. при втором запросе я подменяю его в куках и в параметрах. сразу после этого делаю повторный запрос и в ответ летит заветный Bad request. почему так может быть?
  • Вопрос задан
  • 47 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы