Как я могу убедиться, что 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,
})
Это очень некрасиво, но это работает.