Octoparseでデータをスクレイピングする際、複数ページにわたるデータを取得するためにページネーションを設定することが一般的です。しかし、最後のページで「次へ」ボタンが表示されたままになり、Octoparseが無限にスクレイピングを続けてしまうことがあります。
この問題を解決するためには、以下の2つの方法があります。
1. ループ終了条件を設定する - 「実行が次の回数に達する」
この方法では、ページネーションのループ回数を指定して、特定のページ数でスクレイピングを停止させます。
例えば、最初の50ページのデータを取得したい場合、実行回数を50に設定します。
手順:
ページネーションループを選択し、「実行が次の回数に達する」を選択します。
スクレイピングしたいページ数を入力し、「保存」をクリックして設定を保存します。
2. XPathを変更する
ループ終了条件の設定で問題が解決しない場合、ページネーションループのXPathを修正する必要があります。
Octoparseは、「次へ」ボタンを含むページ上の要素を特定するためにXPathを使用します。ほとんどの場合、Octoparseは自動的かつ正確にXPathを生成できますが、時折、手動でXPathを修正する必要があります。例えば、無限ループの場合、最後のページ以外のすべてのページで「次へ」ボタンを正確に特定できるXPathを作成する必要があります。
ヒント:XPathを作成するためにChrome拡張機能「XPath Helper」を使用することをおすすめします。XPathの作成方法については、チュートリアル「XPathとは何か、Octoparseでの使用方法」を参照してください。
XPathを作成する方法の例を見てみましょう。
以下の2つのスクリーンショットから分かるように、「次へ」ボタンはXPath Helperで自動生成されたXPathによって最初のページと最後のページの両方で特定されています。
最初のページ:
最後のページ:
今度は、最初のページと最後のページのボタンの違いを見つけ、その違いを利用してXPathを作成する必要があります。Chromeでボタンを右クリックして、ボタンのHTMLコードを検証することができます。
最初のページ:
最後のページ:
注意してみると、ボタンのHTMLコードが異なることに気付きます。最後のページのコードには「aria-disabled」という属性があります。
この観察結果を利用して、新しいXPathを作成しましょう。このXPathは、最後のページではない場合にのみ「次へ」ボタンを特定します。新しいXPathは次のとおりです:
//a[@class="pagination__next icon-link"][not(@aria-disabled)]
新しいXPathをXPath Helperに入力して、最初のページと最後のページの両方で「次へ」ボタンを特定できるか確認してください。
最初のページ:
最後のページ:
望んだ通りに最後のページでは一致するnodesがないです。つまり、新しいXPathは最初のページでは「次へ」ボタンを正しく選択しますが、最後のページでは選択しません。もちろん、より正確にするためには、ページ2やページ3などで「次へ」が選択できるかどうかを確認することもできます。
新しいXPathが準備できたら、以下の手順に従ってページネーションループに新しいXPathを適用します:
まとめると、無限ループの問題は解決が難しいものではありません。スクレイピングの要件に応じて、ループを終了する条件を設定するか、XPathを修正することで問題を解決することができます。