Парсинг сайтов с JS

В продолжение темы:

  • "Если хорошо поискать, можно обнаружить внутренний api, который отдает все эти данные (и даже гораздо больше, чем в html) сразу в JSON" - подскажите, пожалуйста, где именно находится JSON на странице https://www.cian.ru/kupit-kvartiru/ и подобных?
  • Страницы таких сайтов (в виде списка карточек) подгружают данные через JS. Но почему на некоторых JSON мне виден в Developer Tools, на других - нет (cian.ru, hh.ru)?

Какая у них технология?


Ответы (1 шт):

Автор решения: Jack_oS

"где именно находится json на странице":

url = 'https://api.cian.ru/search-offers/v2/search-offers-desktop/'
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
payload = {
    "jsonQuery":{
        "region": {"type": "terms", "value": [1]},
        "_type": "flatsale",
        "engine_version": {"type": "term" ,"value": 2},
        "page":{"type": "term", "value": 2}
    }
}

r = requests.post(url, headers=headers, json=payload)
offers = r.json()['data']['offersSerialized']

в offers - данные по объявлениям:

for o in offers:
   address = o['geo']['userInput']
   price = o['bargainTerms']['priceRur']

   print(f"{address:51} {price}")

выведет:

Москва, улица Фадеева, 4А                           92800000
Москва, Поклонная улица, вл9                        57731238
Россия, Москва, Печатников переулок, 19с1           107280000

...

Москва, Хамовники, улица Усачева, 11к2.4            219900000
Раменки, ул. Лобачевского                           71319100
Москва, Хамовники, улица Усачева, 11Е               119450000

→ Ссылка