私は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. ページの読み込みが完了するまでの待ち時間は?
- 2. ページがSeleniumに完全に読み込まれるまで待ちます
- 3. Selenium and Aurelia、ページの読み込みが完了するまでの待ち時間とHTTPコールの完了
- 4. カスタム進行状況のJNLP - 進行状況を表示する前にアプレットクラスを読み込みます。
- 5. Webページが完全に読み込まれるまでWebページ上に進行状況バーを表示する方法は?
- 6. セレン3を使用してページが完全に読み込まれるまで待ちますか?
- 7. Mink:@BeforeStepでページが読み込まれるのを待ちます。
- 8. Webページが完全に読み込まれてから、Pythonリクエストで掻き集めるまで待ちます。
- 9. Elixir Houndがページを読み込むのを待ちます
- 10. Python WebDriverがページを読み込むのを待ちます
- 11. AppleScript:ページがChromeに読み込まれるのを待ちます
- 12. JQuery:アニメーションの読み込みが完了するのを待ちません。
- 13. JavaScriptの読み込み進行状況を追跡する
- 14. ページの表示方法ページの読み込みが完了するまでdivをロードしています
- 15. iMacros:JavaScriptポストリンクのページが読み込まれるまで待つ
- 16. selenium-webdriverとページが読み込まれるまで待つ
- 17. Selenium/Firefoxでページが読み込まれるのを待つ
- 18. ページ全体が読み込まれるまでJQueryの実行を待つ
- 19. JavaScriptを実行する前にページが読み込まれるのを待つ
- 20. ページがレンダリングされるまでのポップアップの進行状況バーを表示
- 21. ページが読み込まれるのを待つ
- 22. ページが読み込まれるのを待つ -
- 23. ページの読み込みが完了したらクエリを実行するには?
- 24. Behat +セレン2が読み込まれるのを待ちます
- 25. Jquery Ajaxのアップロードが進行中のページが読み込まれています
- 26. ページが完全に読み込まれる前にボタンをクリック
- 27. 選択したイメージが完全に読み込まれるまで進行状況アイコンを表示するにはどうすればいいですか?
- 28. Webページをレンダリングする前にフォントが読み込まれるのを待ちます。
- 29. ページ全体の読み込みまで待機する
- 30. 画像読み込みがJavaScriptで完了するまで待つ
URLと実際の例を追加できますか? –
ここでJsoupの代わりにui4jを試すことができます:https://github.com/ui4j/ui4j。 – Stephan