メインコンテンツにスキップ

Octoparseが最後のページを無限にスクレイピングし続ける場合の対策

6か月以上前に更新

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によって最初のページと最後のページの両方で特定されています。

最初のページ:

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を修正することで問題を解決することができます。

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