2016-02-11 7 views
7

ドッカーコンテナ内で実行されているSplash javascriptエンジンでスクラップしたHTMLソースを渡すのにscrapy-splash middlewareを使用しています。スクラップシェルとスクラップスプラッシュ

我々はクモにスプラッシュを使用したい場合は、我々はいくつかのrequired project settingsを設定し、特定のmeta argumentsを指定Requestをもたらす:

yield Request(url, self.parse_result, meta={ 
    'splash': { 
     'args': { 
      # set rendering arguments here 
      'html': 1, 
      'png': 1, 

      # 'url' is prefilled from request url 
     }, 

     # optional parameters 
     'endpoint': 'render.json', # optional; default is render.json 
     'splash_url': '<url>',  # overrides SPLASH_URL 
     'slot_policy': scrapyjs.SlotPolicy.PER_DOMAIN, 
    } 
}) 

文書としてこれが動作します。しかし、Scrapy Shellの内部でscrapy-splashを使用するにはどうすればよいですか?

+2

[DEFAULT_REQUEST_HEADERS](http://doc.scrapy.org/en/latest/topics/settings.html?#std:setting-DEFAULT_REQUEST_HEADERS)のように「DEFAULT_REQUEST_META」はありません添加。 Splashをデフォルトでミドルウェア(https://github.com/scrapinghub/scrapy-splash/issues/11を参照)を介して有効にする方法については、公開ディスカッションがあります。もう一つの選択肢は、scrapy-splash mdwをサブクラス化してそこに強制的に設定することです。アイデアはhttps://github.com/scrapinghub/scrapy-splash/issues –

答えて

12

シェルするURLをsplash http apiにラップするだけです。

だからあなたのようなものしたいと思う:あなたのスプラッシュサービスが
urlを実行しているところlocalhost:portがある

scrapy shell 'http://localhost:8050/render.html?url=http://domain.com/page-with-javascript.html&timeout=10&wait=0.5' 

は、クロールするとurlquoteそれに忘れてはいけないURLです!
render.html可能性のHTTP APIのエンドポイントの1つである、HTMLを保存/読み込み前に実行するJavaScriptのを待つ秒wait
タイムアウト時間を秒数で、この場合に
timeout時間をredered HTMLページを返します。

+0

でこれをより便利にするためにおそらくbashエイリアスを作ることができます。 – Granitosaurus

9

コンフィグレーション済みのScrapyプロジェクト内でscrapy shellを引数なしで実行してからreq = scrapy_splash.SplashRequest(url, ...)を作成し、fetch(req)を呼び出すことができます。

関連する問題