Запит Scrapy може успішно досягти Splash, хоча браузеру всередині Splash усе ще потрібен інший вихідний маршрут. Це два з'єднання:

Scrapy → Splash API
Splash browser → forward proxy → website

Для одного проксі на рендеринг передайте аргумент proxy HTTP API. Splash 3.5 документує URL проксі, наприклад http://proxy.example:8080, або назву налаштованого профілю проксі. Формат URL також підтримує SOCKS5 і необов'язкові облікові дані.

Коли окремим ресурсам сторінки потрібні різні кінцеві точки, використовуйте скрипт execute і зареєструйте вибір перед навігацією:

function main(splash, args)
  splash:on_request(function(request)
    local host = args.default_proxy
    if request.url == args.special_resource then
      host = args.special_proxy
    end
    request:set_proxy{host = host, port = 8080, type = 'HTTP'}
  end)

  assert(splash:go(args.url))
  return splash:html()
end

Передайте default_proxy і special_proxy як імена хостів, а special_resource — як точний URL ресурсу, який потрібно маршрутизувати окремо. Замініть єдиний порт із прикладу, якщо два слухачі різняться. Інші ресурси отримують маршрут за замовчуванням. Список HTTP-проксі пропонує кандидатів кінцевих точок для цих полів хоста й порту, коли маршрути до публічних ресурсів дозволені й до кандидатів не застосовуються облікові дані проксі.

Метод request приймає необов'язкові поля username і password. За типу HTTP цілі HTTPS використовують CONNECT через цей HTTP-проксі; їм не потрібен вигаданий тип HTTPS-проксі.

Зворотний виклик виконується перед кожним запитом. Його методи request не можуть змінити запит після надсилання, а зворотний виклик не може викликати асинхронні методи Splash, як-от splash:go чи splash:wait.

Тримайте вибір маршруту стабільним, коли сторінка очікує одну сесію або одну ідентичність джерела. Випадкове призначення кожного зображення й API-запиту іншому виходу може дати відрендерену сторінку, запити якої більше не належать одній узгодженій сесії.

Схожі статті