AJAXが使われたWebサイトでなぜ重複データを取得し続けるのか?
フォローするタスクが重複データを抽出し続けるのは、WebページにAJAXが使われている原因だと考えられます。このチュートリアルでは、AJAXが使われたWebページでデータが重複に取得されるのを避ける方法を学びます。
AJAXとは何ですか?
AJAXはAsynchronous JavaScript and XMLの略です。これは、Webページがページを更新することなくコンテンツの一部を更新できるようにするプログラミング手法です。AJAXが使われたWebページをクリックして一部の内容が更新されても、リロード信号が表示されず、WebサイトのURLも変更されません。AJAXが不定期スクロールとして頻繁に使用されます。例えば、以下の場合。ページの一番下まで連続してスクロールする必要がある場合や、「もっと見る」ボタンを繰り返しクリックしてページコンテンツを完全に読み込む必要がある場合などです。
例としてhttps://news.yahoo.co.jp/を見てみましょう。
「もっと見る」をクリックした後にサイトがAJAX読み込まれます。Octoparseでタスクのワークフローを見てみましょう。
Octoparseはワークフローの各ステップをトップダウン、インサイドアウトの順番で実行します。特にnews.yahooの場合、「もっと見る」ボタンを繰り返しクリックすることでページネーションが実現されます。ワークフローの実行手順は以下のようです。「ループアイテム」ですべてのリストが抽出され、その前のステップ「ページネーション」に戻り、「もっと見る」ボタンがクリックされ、以前に抽出されたものも含むすべての利用可能なリストがループされて抽出されます。このワークフローだと、多くのデータが重複に抽出されました。
解決方法は?
この前のワークフロー手順ではデータが抽出されるたびに「もっと見る」ボタンを一回クリックしてからデータを抽出するように設定されています。ですが、これは重複データを抽出する可能性があるため、この問題を解決するには「もっと見る」ボタンをクリックする回数を設定してからすべてのコンテンツが読み込まれてからデータを抽出し始める方法があります。ここではちょっとワークフローの手順を変更してみます。
「ループアイテム」ボックスをページネーションループからドラッグして、ページネーションループの真下に配置し、「ページネーション」の終了回数を設定します。このようにして、タスクは設定された回数までページネーションのステップを実行してからデータ抽出を始めるようになります。これで重複データをを避けて必要なデータをすべて抽出することができます。
関連記事:
なぜ「次へ」をクリックした後にOctoparseが止めるのですか?
なぜOctoparseは最初のアイテムだけを抽出して重複のデータを取得するのですか?