Выберите прокси для каждого ресурса Splash
Выбирайте прокси Splash на уровне рендеринга или в обратном вызове on_request, когда отдельным ресурсам нужны разные маршруты.
Запрос 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-запроса другому выходу может дать отрендеренную страницу, запросы которой больше не относятся к одной согласованной сессии.