2017-03-27 15 views
2

스플래시를 사용하여 전체 웹 사이트를 크롤링 할 때 문제가 발생했습니다. 전체 대상 페이지를 렌더링합니다. 일부 페이지가 임의적으로 랜덤하지 않아 정보를 얻지 못했습니다. 그것은 렌더링 작업이 완료되었을 때 지원됩니다. 즉, 다른 렌더링 결과에서 전체 정보를 얻을 수는 있지만 렌더링 결과에서 정보의 일부만 가져옵니다.스플래시가 전체 페이지를 성공적으로 렌더링했는지 확인하려면 어떻게해야합니까?

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

데이터를 가져 왔지만 전부는 아닙니다. wait 인수를 늘려보십시오. – Casper

답변

2

내가 질문에는 답이 없기 때문에이 늦게 회신하고 Google 검색에서 볼 수 있기 때문입니다 :

여기 내 코드입니다.

나는 비슷한 문제가 있으며, wait 인수가 증가하는 것 외에는 작동하지 않을 수도 있지만 신뢰할 수없는 유일한 해결책은 요소를 기다리는 데 사용되는 execute 끝점과 사용자 지정 루아 스크립트를 사용하는 것입니다. 이것이 불필요하게 복잡하게 들린다면, Scrapy와 Splash는 내 의견으로는 잘 설계되어 있지 않지만, 나는 나의 필요를 위해 더 나은 것을 찾지 못했습니다.

내 루아 스크립트는 다음과 같이 보입니다 :

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, 
           }) 

그것은 매우 추한,하지만 작동합니다.