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