私はコレクターグッズを扱うオンラインストアを運営していますが、その市場価格は消費者の需要に基づいて永続的に変動しています。多数のURL(> 30k)をスクラップするより効率的な方法はありますか?
私は最近、〜30kのURLのリストを通って動作するルビースクリプト(レーキタスク)を毎日実行して、競合他社の価格を記録し始め、関連するいくつかのデータを取り込み弾性検索インデックス。私はNokogiriとPhantomJSに依存しています。なぜなら、JavaScriptを実行しなくても、すべてのサイトが必要なデータを適切にレンダリングするわけではないからです。
私のプログラムは現在、実行中に〜4GBのメモリを消費し、PhantomJSはその大部分の消費(〜2.5GB)を占めています。スクリプトは実行に多くの時間がかかります - 私はどのくらいの時間がかかりますが、10時間以上はないと思います。
私は自分のメモリ消費量を減らし、私が掻きすることができる速度を改善する方法についての提案に非常に寛容です。私は競合他社が素晴らしいJSON APIを私に提供することを願っていますが、残念なことにそのような関係はありません。
JavaScriptを使用せずにスクラップできるサイトでは、代替パスを実装します。同時実行性を高める - 実際のCPU負荷に基づいてスロットルを調整する(また、他の1.5GBはどこですか?: - /) – user2864740
あなたは、インターネットで検索して見つけることができる一般的なベストプラクティスに基づいて意見を述べるように求めています。特定の情報が必要な場合は、システムとコードに関する詳細をお知らせください。 「[ask]」と「[mcve]」を参照してください。 –
毎日のスクリプトを実行しないでください。適切なスロットリングを使用して、補助コードで継続的にスクレイピングを実行してください。ページが最後にチェックされた時間を記録して、n時間以内にもう一度やり直してはいけません。ネットの市民としては、他人のホストやその帯域幅を打ち負かさないことを念頭に置いてください。最後に見たときからページが変更されたかどうかを確認するには、HTTP HEADリクエストを使用します。 –