2017-04-07 8 views
0

私はdryscrapeを使用してウェブページをスクラップしています(javascriptのレンダリングされた部分が必要です)、eval_script()を使用して、ページ上のいくつかのjavascriptベースのエラーチェックを抑制しています。私が抑止しているこのスクリプトは基本的に、ユーザーがドロップダウンからのみオプションを選択することが必須となるので、避けなければならないリスナーのonkeyupです。 これはevalのスクリプトです -dryscrape eval_script()の実行をスピードアップする方法はありますか?

session.eval_script("$('#input_elem').removeAttr('onblur onclick onkeyup');") 

今、全体的なスクレイピングは(したがってeval_scriptなし(任意のjavascriptの変更を必要としない、同じドメイン上のページの私の他の実装と比較してはるかに長い時間がかかります) )。

私はtime.time()を使って少しのプロファイリングを行って、スクリプトがどこで減速していたか、実際にはeval_script()ステップで長い時間がかかっているか確認しました。私は、テーブル要素をループしてるとき

Starting to access at 0.00997018814087 
Visited page https://*****/***.aspx 1.30053019524 
First eval script run done 5.97628307343 
Second eval script run done 9.61053919792 
xpath 1 9.6632771492 
xpath 2 9.7702870369 
xpath 3 9.90402317047 
xpath of button to be clicked 9.91756606102 
Button clicked 9.97191905975 
Second page visited 10.4508111477 
Loop 1 else 10.4525721073 
xpath 4 10.5330061913 
xpath 5 10.6111950874 
xpath 6 10.6918411255 
xpath 7 10.7721481323 
Range begins 10.8208150864 
3 
Range ends 13.0008580685 

が、それは約2秒を取っているが、しかし、2つeval_script()のステップは、組み合わせて、約8秒を取っている - ここでの結果です。 Chrome Devツールコンソールでこれを行うと、同じスクリプトが瞬時に実行されます。 ドライスクレイプの実装に時間がかかるのはなぜですか?

答えて

0

eval_script()でjQueryを使用するのが原因であるようです。私は、プレーンJavaScriptを使用して大幅にスクリプトの実行時間を短縮することができました -

session.eval_script("document.getElementById('input_elem')").removeAttribute('onblur'); 

私は同じ要素上の2つの別々の属性の除去工程のための2つのラインを使用する必要がありました。

これらの私のプロファイリングは、現在ログに記録されている -

Starting to access at 0.0151550769806 
Visited page https://*****/***.aspx 1.73412919044 
First eval script run done 1.77594304085 
First eval script part 2 run done 1.81522011757 
Second eval script run done 1.85607099533 
xpath 1 1.94704914093 
xpath 2 2.03846216202 
xpath 3 2.13886809349 
xpath of button to be clicked 2.26395010948 
Button clicked 2.27277112007 
Second page visited 3.30618906021 
Loop 1 else 3.38708400726 
xpath 4 3.46828198433 
xpath 5 3.54840707779 
xpath 6 3.63034701347 
xpath 7 3.7106590271 
Range begins 3.75155210495 
3 
Range ends 5.91926407814 

今でも、rangeループの各ステップは、私がさらに削減することを目指しています約0.7秒を取っています。

関連する問題