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

Как можно спарсить отзывы с Яндекс.карты?

Всем доброго дня уважаемые знатоки.

Не получается решить проблему при написания парсера, возможно у вас получится решить данный вопрос.
Скрипт парсит отзывы по ссылке (https://yandex.ru/maps/org/epilium_clinic/19126582...) по 50 шт за запрос, не получается решить задачу с переходом на другие страницы.

В ответе есть ссылка на отзывы, но по ней можно получить только первые 50 шт.
https://yandex.ru/maps/api/business/fetchReviews?a...

следующею порцию &page=2 получаем из ajax запроса, когда доходим до конца страницы.

Нужные нам параметры с токенами и т.д., хроняться в скрипте js , за исключением одного который мне и не удается найти s=1010565311.

Подскажите пожалуйста как можно получить след параметр &s=???, возможно есть какой то другой подход для получения всех отзывов.

Заранее спасибо!

import json

import requests
from bs4 import BeautifulSoup


headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0"}

session = requests.Session()  # Создаем сессию
session.headers = headers  # Передать заголовок в сессию

base_url = "https://yandex.ru/maps/org/epilium_clinic/191265823168/reviews"


def get_contents(response):
    """Собрать данные с страницы"""
    soup = BeautifulSoup(response.text, "lxml")
    content = soup.find("script", {"class": "config-view"}).contents
    return json.loads(content[0])


def get_response(url):
    """- выполняем запрос"""
    response = session.get(url=url)
    if response.status_code != 200:
        print("Произошла ошибка запроса код не 200")
    return response


def get_params(data):
    """- собрать данные запроса"""
    csrf_token = data.get("csrfToken")
    company_id = data.get("query").get("orgpage").get("id")
    session_id = data.get("counters").get("analytics").get("sessionId")
    req_id = data.get("orgpagePreloadedResults").get("requestId")
    s = ????

    print(csrf_token)
    print(company_id)
    print(session_id)
    print(req_id)

    print(data)


def main():
    response = get_response(base_url)
    content = get_contents(response)
    get_params(content)


if __name__ == '__main__':
    main()
  • Вопрос задан
  • 3232 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
moonz
@moonz
web developer | seo | design
Для таких задач крайне рекомендую Selenium
Ответ написан
Ваш ответ на вопрос

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

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