0

我正在使用 dryscrape 抓取网页(因为我需要 javascript 渲染的部分),并且我正在使用 eval_script() 来抑制页面上的一些基于 javascript 的错误检查。我要禁止的这个脚本基本上是一个onkeyup我需要避免的侦听器,因为它强制用户只能从下拉列表中选择选项。这是评估脚本 -

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

现在,与我在同一域上的其他页面实现相比,整体抓取需要更长的时间,不需要任何 javascript 修改(因此没有 eval_script())。

我做了一些分析,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 秒,但两个 eval_script() 步骤加起来大约需要 8 秒。当我在 Chrome 开发工具控制台中执行此操作时,相同的脚本会立即运行。为什么 dryscrape 实施需要这么多时间?

4

1 回答 1

0

在 eval_script() 中使用 jQuery 似乎是罪魁祸首。我能够使用纯 javascript 显着减少脚本执行时间 -

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

我不得不在同一个元素上使用两行来执行两个单独的属性删除步骤。

这些是我现在的分析日志 -

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 秒,我的目标是进一步减少。

于 2017-04-07T12:44:43.653 回答