Я новичок в 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). Можно ли как-то дождаться смены стола? В идеале с некоторым тайм-аутом.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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