スクレイピングプレスのスクレイピングする際に、ページネーションしている箇所のコンテンツがすべて取得できない | ワードプレス魔改造屋

スクレイピングプレスのスクレイピングする際に、ページネーションしている箇所のコンテンツがすべて取得できない

【その疑問や悩みについてネット検索で調査済みですか?】

はい

【その疑問や悩みはマニュアルには載っていないことですか?】

はい

【阿修羅ワークスのプラグインは全て最新ですか?】

はい

【あなたが疑問や悩みに感じていることについて教えて下さい】

ページネーションの箇所をスクレイピングする際に
ページネーションでのスクレイピングを利用できているが、
なぜか途中で毎回止まっていまいすべてのコンテンツをスクレイピングできない。

これを解決したい。

【それを疑問や悩みに思ったキッカケについて教えて下さい】

ページネーションのスクレイピングを実施したが
思ったとおりの結果を得られなかった。

コメント

  1. 2020/12/05(土) 23:57:12
    追加情報です。

    https://gyazo.com/d89447ffa97a68b916589aaed22a64a2

    このようなページネーションの場合、表示されている3までは取得できるが
    next以降は取得できません
  2. 2020/12/08(火) 08:52:35
    https://gyazo.com/c665eb724739ec0556b04040048d734a

    マニュアルでふれられていないこのあたりの箇所が
    設定に関係しているのでしょうか・・?
  3. 2020/12/08(火) 10:41:36
    > ページネーションの箇所をスクレイピングする際にページネーションでのスクレイピングを利用できているが、なぜか途中で毎回止まっていまいすべてのコンテンツをスクレイピングできない。

    最初はうまくいって、途中で失敗する場合は、設定は正しいけれど相手方のサーバーが接続を切断している可能性が高いです。
    例えば、ページが数百ページあってそれを全て取得しようとすると、相手方のサーバーに高い負荷をかけることになります。防衛策が導入されているサーバーでは連続アクセスしてくるボットプログラムを切断することもあります。

    あるいは、使用しているサーバーの仕様で短時間での外部サイトへのアクセスを行うこと=ハッキング行為とみなされる場合がある、に制限または禁止をしている場合もあります。

    解決策としてはページネーションの取得範囲を決めて、複数回の小分けにして、短時間で負荷を掛けないようにすることです。

    例えば、フィード登録時に、テスト1ではページネーションを1~10、テスト2ではページネーションを11~20といった具合に分けることです。

    小分けにしても駄目な場合は、設定が間違っているか、取得できるページネーションに限界があるHTML構造の可能性が高いです。
  4. 2020/12/08(火) 12:35:05
    ご回答ありがとうございます。
    https://gyazo.com/d89447ffa97a68b916589aaed22a64a2


    例えばこのケースの場合、html的には

    https://gyazo.com/5123e659e3295bf3285643b010056b8d

    こうなっているのですが、

    https://gyazo.com/52ad9036a27a65b32393d6f8841129cf

    このように「next」を押すたびに、

    liタグの下にaタグのhtmlが/page/4/
    /page/5/

    といった具合で変わっていきます。

    この場合、インデックスの箇所を都度
    /page/4/
    でスクレイピング

    /page/5/で
    スクレイピング
    といった具合に分けて行うのが最適である、ということでしょうか?

    ご確認よろしくお願いいたします。
    • 2020/12/09(水) 18:56:08
      > といった具合に分けて行うのが最適である、ということでしょうか?

      少し違います。


      取得しようとしているサイトのURLが示されていないので、以下は汎用的な回答となります。

      通常、ページャまたはページネーションでは全てのページへのリンクが表示されているわけではなく、5ページ毎とか10ページ毎のように部分的に表示されています。
      例えば5ページ毎の場合は5ページまでしかインデックスページが取得できません。

      そこで、分割して取得する必要があります。

      「https://○○○.jp/」で各インデックスページが

      https://○○○.jp/page1/
      https://○○○.jp/page2/
      https://○○○.jp/page3/
      https://○○○.jp/page4/
      https://○○○.jp/page5/
      https://○○○.jp/page6/
      https://○○○.jp/page7/
      https://○○○.jp/page8/
      https://○○○.jp/page9/
      https://○○○.jp/page10/
      (以下省略)

      のような感じで続いていて、5ページ毎に表示されているとします。
      この場合は、「https://○○○.jp/page1/」にアクセスして取得できるインデックスページは「https://○○○.jp/page5/」までとなります。
      ですので、ひとつのフィードで取得できるインデックスは「https://○○○.jp/page1/」~「https://○○○.jp/page5/」となります。

      6ページ~10ページは新たにフィードを作る必要があります。
      同様に11~15ページも新たにフィードを作る必要があります。

      ※インデックスページが最大何ページまであるのかまでは分からないため、また日々動的に増加していくため、相手方サーバーに負荷を掛け過ぎない量を取得するようにして下さい。
      例えば仮に1000ページあって、5ページごとにページャが表示されている場合は200フィード作る必要がありますが、この設定をそのまま実行してしまうと、一定時間ごとに相手方サーバーにサイバーアタックを仕掛けているのと同等となるため、絶対にお止め下さい。


      次に入力するフィードの「インデックス設定」ですが、1ページ~5ページまでを取得するには以下のようになります。

      「インデックスURL」→ https://○○○.jp/page1/
      「インデックスセレクタ1」→ .pager .pager__item a

      セレクタについては提示して頂いた画像のHTML構造を参考にしています。

記事に戻る

コメントを残す