私はPythonでScreamのためのSplashを使っていくつかの動的Webサイトを削り取ろうとしています。しかし、スプラッシュが特定のケースで完全なページが読み込まれるのを待たないことが分かります。この問題に対処するための猛烈な方法は、大量のwait
時間(たとえば、以下のスニペットでは5秒)を追加することでした。ただし、これは非常に非効率的で、依然として特定のデータをロードできません(コンテンツのロードに5秒以上かかることがあります)。これらの要求を満たすことができる要素待機状態がありますか?PythonのScrapyでSplashRequestを実行しているときに待機中の要素を追加する
yield SplashRequest(
url,
self.parse,
args={'wait': 5},
'User-Agent':"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36",
}
)
ソリューションに追加するには、上記のスクリプトを実行している間に "nil valueのインデックスを作成しようとしています"というLuaエラーが表示されていました。問題は、要素がまだレンダリングされていない場合、スプラッシュ:select( '。my-element') 'によって返された' nil'値に対して ':exists()'を実行できないという問題でした。だから単に ':exists()'の部分を取り除き、while splash:select( '。my-element')do''のループをチェックすることで問題が解決されました。 – NightFury13
良いキャッチ@ NightFury13!私はこの例を変えているので、将来この回答に来る人々はこの問題を起こさないだろう。 –