Как я могу убедиться, что scrapy-splash успешно отрисовал всю страницу

Проблема возникла, когда я просканировал весь веб-сайт с помощью всплеска, чтобы отобразить целевую страницу. Некоторая страница не была случайно выбрана, поэтому я ошибся, чтобы получить информацию, которая будет существовать, когда рендер завершил работу. Это означает, что я просто получаю часть Информации из результата рендеринга, хотя я могу получить всю информацию из другого результата рендеринга.

Вот мой код:

yield SplashRequest(url,self.splash_parse,args = {"wait": 3,},endpoint="render.html")

settings:
SPLASH_URL = 'XXX'  
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

# Enable SplashDeduplicateArgsMiddleware:
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

# Set a custom DUPEFILTER_CLASS:
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter

# a custom cache storage backend:
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

1 ответ

Я отвечаю так поздно, потому что на вопрос нет ответа, и потому что он виден в поиске Google.

У меня была похожая проблема и единственное решение, которое я нашел (кроме увеличения wait аргумент, который может или не может работать, но не является надежным) использует execute конечная точка и пользовательский скрипт lua для ожидания элемента. Если это звучит излишне сложно, то, на мой взгляд, Scrapy и Splash не очень хорошо разработаны, но я пока не нашел ничего лучшего для своих нужд.

Мой скрипт Lua выглядит примерно так:

lua_base = '''
function main(splash)
  splash:init_cookies(splash.args.cookies)
  splash:go(splash.args.url)

  while not splash:select("{}") do
    splash:wait(0.1)
  end
  splash:wait(0.1)
  return {{
  cookies = splash:get_cookies(),
  html=splash:html()
  }}
end
'''
css = 'table > tr > td.mydata'
lua_script = lua_base.format(css)

и я генерирую такие запросы:

        yield SplashRequest(link, self.parse, endpoint='execute',
                            args={
                                    'wait': 0.1,
                                    'images': 0,
                                    'lua_source': lua_script,
                                })

Это очень некрасиво, но это работает.

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