2016-10-08 5 views
0

ScrapyとSplashを使用してJavaScriptを含むページをクロールしたいとします。Scream + 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を実行すると、それはまだ<script type = text/javascript> JS_FUNCTIONS(generate html content) </script>含むとJS_FUNCTIONSによって生成されるべきHTMLコンテンツが含まれていないHTMLファイルを返します。

javascriptによって生成されたコンテンツを含むhtmlファイルを取得するにはどうすればよいですか?

ありがとうございました。

+0

コードが正しく見えます。私はそれが期待どおりに動作しない2つの理由が考えられます:スプラッシュスプラッシュが不適切に構成されている(かなりのステップがあります)か、スプラッシュにページをレンダリングする際に問題があります。 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') 
関連する問題