2

Un problème est survenu lorsque j'ai été analysé sur l'ensemble du site Web en utilisant splash pour rendre la page cible entière.Certaines pages n'ont pas été aléatoires, donc j'ai été fautif Cela permet d'être là lorsque le travail de rendu a été fait. Cela signifie que je viens d'obtenir une partie de l'information provenant du résultat de rendu bien que je puisse obtenir l'ensemble des informations à partir d'un autre résultat de rendu.Comment puis-je m'assurer que scrapy-splash a rendu toute la page réussie

Voici mon code:

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' 
+0

Donc, vous obtenez vos données mais pas tout? Essayez d'augmenter l'argument d'attente. – Casper

Répondre

2

Je répondais cette fin parce que la question n'a pas de réponse et parce qu'il est visible sur la recherche Google. J'ai eu un problème similaire et la seule solution que j'ai trouvée (en plus d'augmenter l'argument wait, qui peut ou peut ne pas fonctionner, mais n'est pas fiable) utilise le point de terminaison execute et le script LUA personnalisé pour attendre un élément. Si cela semble inutilement complexe, Scrapy et Splash ne sont pas bien conçus à mon avis, mais je n'ai rien trouvé de mieux pour mes besoins.

scénario Mon Lua ressemble à ceci:

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) 

et je générer des demandes similaires:

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

Il est très laid, mais cela fonctionne.