@PHPjedi

Как написать парсер для SPA?

Добрый вечер.

Как написать парсер для динамического сайта?

Вот есть статические сайты, в которых загружается уже готовый шаблон в html. Конечно же, парсить такой сайт довольно просто.

А вот как парусите сайт SPA?

Проблема в том, что контент от сервера загружается потом, после загрузки главного шаблона. При попытке парусить такой сайт, шаблон будет Рустам, так как скрипты не запустились.

Заранее большое спасибо!
  • Вопрос задан
  • 2156 просмотров
Решения вопроса 4
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
если смотреть и парсить ajax запросы с сайта, то получится шаблон Станислав, и про Рустама можно забыть.

А если надо именно чтобы загрузился сайт как есть и обработал всё за вас, то придётся брать headless chrome какой-нибудь для загрузки с отработкой скриптов и прочего.
Ответ написан
Комментировать
alsolovyev
@alsolovyev
¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
контент от сервера загружается потом

Получается есть какой-то запрос от клиента, так? Ищите этот запрос на сайте, а потом повторяйте его в своем парсере. Скорее всегда надо будет передавать какие-то данные в заголовке(csrftoken или еще чего) - ищите какие.
Возьмем для примера авторизацию на сайте. Вы же не можете спарсить сайт если не будете авторизованы, так? Приходится авторизоваться силами парсера, получать какой-то токен, при следующем запросе передавать этот токен, чтобы сервер проверил его и отдал скрытые данные.

Вот код авторизации на python для примера:
import requests

url = 'https://nlstar.com/ru/office4/login/'

s = requests.Session()

r = s.get(url)
csrf_token = r.cookies['csrftoken']

data = {
    'login':        '007-2400101',
    'password':         '377609',
    'csrfmiddlewaretoken': csrf_token

}

d = s.post(url, data=data, headers=dict(Referer=url))
dd = s.get('https://nlstar.com/')
print(dd.text)


Очевидно, что нет единого паттерна решения этой задачи. Потому что каждый сайт имеет свою защиту(мб в Вашем случае ее нет вообще и Вам просто post запрос на определенный url надо послать). Ищите. Разбирайтесь.
Ответ написан
cjstress
@cjstress
C#
Делал я одно решение на c#. Берешь cefSharp запускаешь и ждешь пока определенный элемент не появится на странице (там события всякие и триггеры есть) и парсишь как обычный сайт через человеческие селекторы css. Апи конечно можно подергать, но если чуваки данные в непонятном виде присылают и js обфусцирован на клиенте, то это отличное решение. Хотя и тяжелое. Что парсишь?
Ответ написан
Комментировать
@valtermild
Используй библиотеку puppertee
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
СПА использует апи
Шах и мат
Ответ написан
IgorPI
@IgorPI
Используйте Cypress
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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