2016-10-08 50 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')