2016-10-08 51 views
0

我想使用Scrapy和Splash抓取包含JavaScript的頁面。使用Scrapy + Splash在JavaScript執行後獲取HTML文件

在頁面中,<script type = text/javascript> JS_FUNCTIONS(generate html content) </script>存在,所以我試圖在運行下面的JS_FUNCTIONS之後獲取html文件。

import scrapy 
from scrapy_splash import SplashRequest 

class FooSpider(scrapy.Spider): 
    name = 'foo' 
    start_urls = ["http://foo.com"] 

    def start_requests(self): 
     for url in self.start_urls: 
      yield SplashRequest(url, self.parse, args={'wait': 0.5}) 

    def parse(self, response): 
     file_name = response.url.split("//")[-1] 
     with open(filename, 'wb') as f: 
      f.write(response.body) 

當我執行命令scrapy crawl foo,它返回的HTML文件,該文件還包括<script type = text/javascript> JS_FUNCTIONS(generate html content) </script>,並且不包含HTML內容的,應當由JS_FUNCTIONS產生。

如何獲取包含由javascript生成的內容的html文件?

謝謝。

+0

的代碼看起來是正確的;我認爲有兩個可能的原因不能按預期工作:scrapy-splash配置不當(有很多步驟),或者Splash在渲染頁面時遇到一些麻煩。我建議檢查Splash是否首先正確渲染頁面:轉到http:// <你的濺水地址>:,在那裏輸入你的URL並檢查它是否呈現OK。 –

回答

0

也許嘗試用下面的Lua代碼執行:

lua_code = """ 
function main(splash) 
    local url = splash.args.url 
    assert(splash:go(url)) 
    assert(splash:wait(0.5)) 
    return { 
    html = splash:html(), 
    } 
end 
        """ 

SplashRequest(url,self.parse, args={'lua_source': lua_code}, endpoint='execute')