Может ли scrapy-splash игнорировать 504 HTTP-статус? - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу отказаться от загрузки веб-страниц с помощью JavaScript, поэтому я использую scrapy-splash, но на некоторых страницах так много времени загрузки.

вот так: enter image description here

я думаю [processUser ..] вещи, которые делают медленнее.

Есть ли способ игнорировать эти 504 страницы? потому что, когда я устанавливаю тайм-аут меньше 90, я вызываю ошибку шлюза 504 в оболочке или пауках.

и может ли получить HTML-код результата (только 200), когда время, которое я установил, истекло?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

В splash есть механизм для прерывания запроса до того, как он начнет загружать тело, которое вы можете использовать, используя splash:on_response_headers hook .Однако в вашем случае эта ловушка сможет только поймать и прервать страницу, когда статус и заголовки находятся, и это после того, как он заканчивает ожидание времени ожидания шлюза (504).Таким образом, вместо этого вы можете захотеть splash:on_request hook отменить запрос, прежде чем он будет отправлен, вот так

function main(splash, args)
    splash:on_request(function(request)
        if request.url:find('processUser') then
            request:abort()
        end
    end)
    assert(splash:go(args.url))
    assert(splash:wait(.5))
    return {
        har = splash:har(),
    }
end

UPD: еще один и, возможно, лучший способ сделать это - установить splash.resource_timeout перед выполнением любых запросов:

function main(splash, args)
    splash.resource_timeout = 3
    ...
0 голосов
/ 18 сентября 2018

Когда вы используете Splash для рендеринга веб-страницы, вы в основном используете веб-браузер.

Когда вы просите Splash визуализировать http://example.com:

  1. Splash переходит к http://example.com
  2. Splash выполняет весь javascript
    2.1 javascriptделает некоторые запросы
    2.2 некоторые запросы возвращают 50-кратные коды
  3. Splash возвращает данные страницы

К сожалению, сейчас Splash не поддерживает никаких пользовательских правил для блокировки запросов javascript - он просто принимаетстраница и делает все, что ваш браузер будет делать без каких-либо дополнений: загрузить все без вопросов.

С учетом всего вышесказанного маловероятно, что эти 50-кратные запросы замедляют загрузку вашей страницы, в таком случае это не должно быть значительным.

...