私はWebページを解析し、Jsoupを使用してデータを抽出しようとしています。しかし、リンクは動的であり、詳細を表示する前に待ち受けページをスローします。したがって、Jsoupは詳細ページではなく待機ページを処理しているようです。ページが完全に読み込まれるまで待つようにするにはどうしてですか?jsoupを完了ページ(進行状況ページをスキップする)が読み込まれるまで待ちますか?
答えて
おそらく、問題のページはブラウザ(クライアント側)でJavaScriptによって生成されている可能性があります。 JsoupはJavaScriptを解釈しないので、運が悪いです。ただし、ブラウザの開発者ツールの[ネットワーク]タブでページの読み込みを分析し、ページ読み込み時にどのAJAX呼び出しを行うかを調べることができます。これらの呼び出しにはURLもあり、必要なすべての情報を直接アクセスすることができます。また、実際のブラウザエンジンを使用してページを読み込むこともできます。 Java 8を使用している場合は、そのためにselenium webdriverやJavaFX Webkitコンポーネントなどのライブラリを使用できます。
ページが読み込まれると動的にコンテンツの一部が作成される場合は、 JSelpでSeleniumを使うべきです:
WebDriver driver = new FirefoxDriver();
driver.get("http://stackoverflow.com/");
Document doc = Jsoup.parse(driver.getPageSource());
ここでもまた、私が解析しようとしているウェブページがJavaスクリプトを持っているなら、実行を待つことはなく、私は待ち受けページを読み込みます。おそらく、jsoupを使用する代わりに要素をロードするのを待ってすぐに解析する方が良い方法かもしれません。それは私のために働いたようだ。私の初期の質問にはJsoupの使用法が含まれているかもしれません。あなたの答えにはjsoupも含まれています。私は私の質問によく言い聞かせるべきかもしれません。ありがとう! – Thiru
私はちょうどlukschの答えをもう少し広げていると思います。私はWebフレームワークに精通していないので、答えは少し難解でした。 Jsoupのようなパーサーを使用してページを動的にロードしていたので、解析を試みる前にすべての要素が完全にロードされていることを知る必要があるため、難しくなりました。そのため、すぐに解析するのではなく、Webdriver(セレン)を使用して要素の状態を確認し、ロードされたら、ページソースを取得して解析するか、Webdriver自体を使用して別のパーサを使用する代わりに必要なデータを収集します。
WebDriver driver = new ChromeDriver();
driver.get("<DynamicURL>");
List<WebElement> elements = null;
while (elements == null)
{
elements = driver.findElements(By.className("marker"));
if (!valuePresent(elements))
{
elements = null;
}
}
if (elements != null)
{
processElements(elements);
}
- 1. カスタム進行状況のJNLP - 進行状況を表示する前にアプレットクラスを読み込みます。
- 2. Webページが完全に読み込まれるまでWebページ上に進行状況バーを表示する方法は?
- 3. Mink:@BeforeStepでページが読み込まれるのを待ちます。
- 4. Python WebDriverがページを読み込むのを待ちます
- 5. JQuery:アニメーションの読み込みが完了するのを待ちません。
- 6. JavaScriptの読み込み進行状況を追跡する
- 7. selenium-webdriverとページが読み込まれるまで待つ
- 8. ページの表示方法ページの読み込みが完了するまでdivをロードしています
- 9. ページ全体が読み込まれるまでJQueryの実行を待つ
- 10. Webページをレンダリングする前にフォントが読み込まれるのを待ちます。
- 11. jquery .htmlメソッドがレンダリングを完了するまで待ちます
- 12. WebページがJavaで完全にロードされるまで待ちます
- 13. JavaのURLから内容を読み取る前にページが読み込まれるまで待つ
- 14. QUnit、JQuery、iframeによるUIテスト - 新しいページが読み込まれるまでの待ち時間は?
- 15. スレッド1のスレッドが完了するまで待ちます。
- 16. 複数のAsyncTaskが完了するまで待ちます
- 17. スレッドプールでタスクが完了するのを待ちます
- 18. リスト内のすべてのタスクが完了するまで進行状況を表示<Task>
- 19. ページの読み込み時にアニメーションを開始する、読み込まれたページで停止する
- 20. ページが読み込まれた後にJavascriptInterfaceでメソッドを実行
- 21. コードを実行する前にスウィフトアニメーションが完了するのを待ちます。
- 22. ページを再読み込みすると、再度イベントハンドラが実行されます
- 23. JavaScriptがページと進行状況バーを更新しない
- 24. webOSでページが読み込まれるときに機能を実行する
- 25. NodeJS - Bluebird:ループが完了するのを待ちます
- 26. android sdkアニメーションが完了するのを待ちます
- 27. ページがWebViewの読み込み中の進行ダイアログ
- 28. PHPでページが読み込まれる内容を調べる
- 29. テーブルビューが読み込まれる前に作業をしているときに進行状況を示すことができますか?
- 30. ServiceWorkerがサブスクライブする前に登録を完了するまで待ちます。
URLと実際の例を追加できますか? –
ここでJsoupの代わりにui4jを試すことができます:https://github.com/ui4j/ui4j。 – Stephan