web-dev-qa-db-ja.com

スクレイピースプラッシュを使用すると、スクレイピング速度に大きな影響がありますか?

これまでのところ、私はajaxを使用してWebサイトを処理するために、スクレイピーとカスタムクラスを作成してきました。

しかし、私が理解していることから、JavaScriptの後にレンダリングされたHTMLをスクレイピングするスクレイピースプラッシュを使用すると、クローラーの速度に大きな影響がありますか?

スクレイピーでバニラのHTMLページをスクレイピングするのにかかる時間と、スクレイピースプラッシュでJavaScriptでレンダリングされたHTMLをスクレイピングするのにかかる時間を比較するとどうなりますか?

そして最後に、scrapy-splashとSeleniumはどのように比較されますか?

8
hsy

これは、ページに存在するJavaScriptの量によって異なります。

すべてのjavascriptをレンダリングするには、スプラッシュにしばらく時間がかかり、pythonアプリケーションは、レンダリングが完了するため、スプラッシュもそれを実行できない場合があります。

  • 通常は時間がかかるため、レンダリングを明示的に待機させることができます。
  • また、いくつかのwaitを置くことをお勧めします。

ここに、

import scrapy
from scrapy_splash import SplashRequest

yield scrapy.Request(url, callback=self.parse, meta={'splash':{'args':{'wait':'25'},'endpoint':'render.html'}})

または

import scrapy
from scrapy_splash import SplashRequest

yield SplashRequest(url, self.parse, endpoint='render.html',
        args={'wait': 5, 'html' : 1 } ) 

スクレイピーとセレンの間

Seleniumは、Webブラウザーの対話を自動化するためにのみ使用され、Scrapyは、HTMLのダウンロード、データの処理、および保存(Webクロールフレームワーク全体)に使用されます。

スクレイピングについて話すと、scrapyが問題であり、問​​題がJavaScriptであるかどうかをお勧めします。

  • Scrapyにはすでに scrapy-splash というJavaScript用の独自の公式プロジェクトがあります
  • また、スクレイピースパイダーでSeleniumからwebdriverの新しいインスタンスを作成し、いくつかの作業を行って、データを抽出し、すべての作業が完了した後に閉じることができます。
11
Nandesh