Scrapy сұранысы Splash-қа сәтті жетуі мүмкін, бірақ Splash ішіндегі браузерге әлі де басқа шығыс маршруты қажет. Бұл екі қосылым:

Scrapy → Splash API
Splash browser → forward proxy → website

Әр рендерге бір прокси үшін HTTP API-дің proxy аргументін беріңіз. Splash 3.5 http://proxy.example:8080 сияқты прокси URL-ін немесе конфигурацияланған proxy-profile атауын құжаттайды. Оның 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 мақсаттары сол HTTP прокси арқылы CONNECT пайдаланады; оларға ойдан шығарылған HTTPS прокси түрі қажет емес.

Кері шақыру әр сұраныстың алдында орындалады. Оның request әдістері жіберілген сұранысты өзгерте алмайды, ал кері шақыру splash:go немесе splash:wait сияқты асинхронды Splash әдістерін шақыра алмайды.

Бет бір сессияны немесе бір дереккөз идентитетін күткенде маршрут таңдауын тұрақты ұстаңыз. Әрбір сурет пен API сұранысын кездейсоқ басқа шығысқа тағайындау сұраныстары енді бір сабақтас сессияға жатпайтын рендерленген бетті тудыруы мүмкін.

Қатысты мақалалар