すべてのコレクション
よくある質問
Octoparseが最後のページを無限にスクレイピングし続ける場合の対策
Octoparseが最後のページを無限にスクレイピングし続ける場合の対策
一週間前以上前にアップデートされました

多くの場合、取得するデータが複数のページにまたがっているため、ページネーションを使って複数のページからデータを抽出することは一般的です。

しかし、Octoparseが最後のページでスクレイピングを続けて停止しないことがあります。これは、最後のページで「次へ」ボタンがまだ表示され、ページネーションが無限ループになっている可能性があります。この問題に対処するために、ページネーションループアイテムの「高度なオプション」で「ループ終了時」条件を設定するか、XPathを変更して無限ループを回避する方法があります。

1. ループ終了条件を設定する - 「実行が次の回数に達する」

「実行が次の回数に達する」オプションを利用することで、特定のページでページネーションを停止できます。ページネーションステップの「実行が次の回数に達する」条件を設定すると、ページネーションが設定された回数に達した時点で停止します。

(例えば、最初の50ページのデータをスクレイピングする場合、実行回数を50に設定できます。)

このため、「実行が次の回数に達する」オプションを設定することで、ページクリックの回数がわかれば、問題を完全に解決できます。

まず、ページネーションループを選択し、「実行が次の回数に達する」ドロップダウンメニューを開きます。「実行が次の回数に達する」を選択し、ループの実行回数として数字を設定し、「OK」をクリックして設定を保存します。

2. XPathを変更する

ループ終了条件の設定では問題が解決しない場合、ページネーションループのXPathを変更する必要があるかもしれません。Octoparseは、「次へ」ボタンを含むページ上の要素を特定するためにXPathを使用します。ほとんどの場合、Octoparseは自動的かつ正確にXPathを生成できますが、時折、手動でXPathを修正する必要があります。例えば、無限ループの場合、最後のページ以外のすべてのページで「次へ」ボタンを正確に特定できるXPathを作成する必要があります。

ヒント:XPathを作成するためにChrome拡張機能「XPath Helper」を使用することをおすすめします。XPathの作成方法については、チュートリアル「XPathとは何か、Octoparseでの使用方法」を参照してください。

XPathを作成する方法の例を見てみましょう。

以下の2つのスクリーンショットから分かるように、「次へ」ボタンはXPath Helperで自動生成されたXPathによって最初のページと最後のページの両方で特定されています。

最初のページ:

first_page.jpg

最後のページ:

last_page.jpg

今度は、最初のページと最後のページのボタンの違いを見つけ、その違いを利用してXPathを作成する必要があります。Chromeでボタンを右クリックして、ボタンのHTMLコードを検証することができます。

最初のページ:

first_page1.jpg

最後のページ:

last_page1.jpg

注意してみると、ボタンのHTMLコードが異なることに気付きます。最後のページのコードには「aria-disabled」という属性があります。

この観察結果を利用して、新しいXPathを作成しましょう。このXPathは、最後のページではない場合にのみ「次へ」ボタンを特定します。新しいXPathは次のとおりです:

//a[@class="pagination__next icon-link"][not(@aria-disabled)]

新しいXPathをXPath Helperに入力して、最初のページと最後のページの両方で「次へ」ボタンを特定できるか確認してください。

最初のページ:

first_page2.jpg

最後のページ:

last_page2.jpg

望んだ通りに最後のページでは一致するnodesがないです。つまり、新しいXPathは最初のページでは「次へ」ボタンを正しく選択しますが、最後のページでは選択しません。もちろん、より正確にするためには、ページ2やページ3などで「次へ」が選択できるかどうかを確認することもできます。

新しいXPathが準備できたら、以下の手順に従ってページネーションループに新しいXPathを適用します:

  1. ページネーションの設定に移動します。

  2. 元のXPathを修正したXPathで置き換えます。

  3. 変更を保存するために「保存」をクリックします。

まとめると、無限ループの問題は解決が難しいものではありません。スクレイピングの要件に応じて、ループを終了する条件を設定するか、XPathを修正することで問題を解決することができます。

こちらの回答で解決しましたか?