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

Как правильно подать GET запрос чтобы страница изменилась?

Я собираю отзывы с Яндекс.Карты и подаю запрос на изменение сортировки "По новизне". Могли бы вы объяснить, что я делаю не так? (Сортировка почему-то не применяется)
import requests
url = 'https://yandex.ru/maps/org/1581539215/reviews'
headers = {'ranking': 'by_time'}
r = requests.get(url, headers=headers)
print(r.text)
  • Вопрос задан
  • 365 просмотров
Подписаться 2 Простой 5 комментариев
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Смотрите. Вот у вас задача - получить отзывы так, чтобы новые были сверху.
Вы дёргаете урл страницы с отзыывами и суёте в заголовки параметр с указанием сортировки. Но с чего вы вообще взяли, что АПИ принимает этот параметр через заголовки?

Как следовало бы вам решать эту проблему. Метод годный для многих случаев.
Нажимайте в хроме F12, выбирайте вкладку Networking и меняйте сортировку (мышкой на страничке). Смотрите, там появляется новый запрос, который страница делает через аякс не перезагружаясь полностью:
https://yandex.ru/maps/api/business/fetchReviews?a...
У вас запрос по конкретно этому урлу не выдаст данных, поскольку scrf-токен будет не актуальным и сессия не будет валидной. Чтобы получить токен и сессию вы можете сделать штатный гет запрос к странице. как вы делали в своём посте.
Имея необходимые токены вы можете делать запросы с параметром ajax и не придётся парсить страницу выуживая данные, они будут сразу в json.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
У вас URL на страницу с отзывами, а на скрине URL на yandex.ru/map/api. Скорее всего, даже если вы поменяете URL в программе, он вам не отдаст нужный ответ, необходимо смотреть, какие куки он при этом отдает.
Ответ написан
Andrey_PSK
@Andrey_PSK
Решили задачку? )
Get запроса к урлу прикрутить нельзя никак?
Ответ написан
Комментировать
@it_monsterVV
У яндекса по данному запросу можно получать отзывы и указывать сортировку по новизне или релевантности:
https://yandex.ru/maps/api/business/fetchReviews?a...}

Все параметры можно получать из html страницы и самый сложный параметр {s_hash} - специальный хэш для верефикации запроса и генерируется он из всех get параметров:
def hash_function(e):
    t = len(e)
    n = 5381
    for r in range(t):
        n = 33 * n ^ ord(e[r])
    return n & 0xFFFFFFFF

s_hash = hash_function("ajax=1&businessId={busness_id}&csrfToken={csrf_token}&locale=ru_RU&page=1&pageSize=50&ranking=by_time&reqId={req_id}&sessionId={session_id}")


если что пишите мне на почту.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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