Scrapy-splash - выполняет ли splash:go(url) в lua_script запрос GET снова?

Я новичок в Scrapy-splash, и я пытаюсь очистить ленивый datatable, который представляет собой таблицу с разбиением на страницы AJAX.

Поэтому мне нужно загрузить веб-сайт, дождаться выполнения JS, получить html таблицы, а затем нажать кнопку «Далее» при разбивке на страницы.

Мой подход работает, но я боюсь, что запрашиваю сайт два раза.

Первый раз, когда я получаю SplashRequest, а затем, когда lua_script выполняется.

Это правда? Если да, то как заставить его выполнять запрос только один раз?

class JSSpider(scrapy.Spider):
    name = 'js_spider'
    script = """
    function main(splash, args)
        splash:go(args.url)
        splash:wait(0.5)
        local page_one = splash:evaljs("$('#example').html()")
        splash:evaljs("$('#example_next').click()")
        splash:wait(2)
        local page_two = splash:evaljs("$('#example').html()")
        return {page_one=page_one,page_two=page_two}
    end"""

    def start_requests(self):
        url = f"""https://datatables.net/examples/server_side/defer_loading.html"""
        yield SplashRequest(url, endpoint='execute',callback=self.parse, args = {'wait': 0.5,'lua_source':self.script,'url':url})

    def parse(self, response):
        # assert isinstance(response, SplashTextResponse)
        page_one = response.data.get('page_one',None)
        page_one_root = etree.fromstring(page_one, HTMLParser())
        page_two = response.data.get('page_two',None)
        page_two_root = etree.fromstring(page_one, HTMLParser())

РЕДАКТИРОВАТЬ

Также я хотел бы подождать, пока AJAX не будет работать лучше, чем просто splash:wait(2). Можно ли как-то дождаться смены стола? В идеале с некоторым тайм-аутом.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
946
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сценарий Lua очень буквален - если у вас есть 1 splash:go, то один запрос выполняется 1 работником заставки.
Ваш краулер здесь в порядке.

Однако бессмысленно придираться: ваш паук подключается к рабочему через http, поэтому в теории выполняются два запроса: 1-й для службы всплеска и 2-й для таргетинга с помощью рабочего всплеска.

Другие вопросы по теме