AmazonのCookieを用いたスクレイピング対策の攻略法

AmazonのCookieを用いたスクレイピング対策を打破する方法 プログラミング

また、Amazonがスクレイピング対策をしてきました。
本当にAmazonはデータを抜かれるのが嫌みたいです。

Amazonは、以前にもスクレイピング対策をしてきました。
そのときは、Seleniumで難なくその対策を攻略しました。
そのことは、次の記事でまとめています。

そして、今回はタイトルに書いたようにCookieを利用してきました。
その対策のせいで、スクレイピングのプログラムが動かなくなりました。

でも、今回もSeleniumで簡単に攻略しました。
この記事では、その攻略方法について解説していきます。

  • Cookie未設定だと商品ページでボット扱いされる
  • 【攻略法】別ページへアクセスしてから商品ページへアクセスする

それでは、上記に沿って説明していきます。

Cookie未設定だと商品ページでボット扱いされる

突然、先日まで動いていたスクレイピングのプログラムが動かなくなりました。
スクレイピングのプログラム自体は、以下をご覧ください。

上記の内容をもとに改良したプログラムが動かなくなったのです。
でも、もうこちらも慣れたモノです。

Amazonが新たなスクレイピング対策をしてきたと思いました。
その予想通り、以下の画面に遷移させられていました。

ボットのチェックページです。
はい、完全に疑われていますね。

ただ、正直頭の中は「?」でした。
PythonでSeleniumを利用すれば、ボットだと見抜かれないはずなのに・・・

それなのにボット扱いされていたのです。
初めは、IP制限されたのかと思いました。
しかし、Chromeでは普通にアクセスできました。

申し訳ありませんが、お客様がロボットでないことを確認させていただく必要があります。最良のかたちでアクセスしていただくために、お使いのブラウザがクッキーを受け入れていることをご確認ください。

注意書きをよく読むと、「クッキー」と記載してありますね。
じゃあ、クッキー未設定であることがボット扱いされた原因かもしれないと解釈。
さらに、以下のページをAmazonで見つけました。

上記より、Cookie(クッキー)で何かしらの対応をAmazonがやったのは確実でしょう。

状況を整理します。

  • 直接商品ページにアクセスするとボット扱いのページに強制転送される
  • それ以外のページにアクセスすれば強制転送はされない

商品ページにアクセスした際に、クッキーが未設定だとアウトのようです。
おそらく、他にも条件はあるはずです。
ただ、これ以上は妄想になるのでやめておきます。

そこで、商品ページへアクセスする前にクッキーを設定する方法を考えました。
下記で説明します。

別ページへアクセスしてから商品ページへアクセスする

この方法は、単純です。
とりあえず、すぐに打てる対応策として捉えてください。

driver.get("軽いページのURL")
driver.get("商品ページのURL")

商品ページのURLへアクセスする前に、次のようなページに遷移するだけです。
軽いページであれば、どこでもいいと思います。

利用規約
https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201909000

ただ、この方法は無駄な動きの処理が増えます。
軽いページと言えども、無駄なアクセスには変わりありません。

それに、軽いページ自体にも今回のような対策が実施されることも否定できません。
おそらく、価値のないページにまで対策をしてくるとは思えませんけど・・・

あと、誤解がないように説明しておきます。
一度、軽いページへアクセスしてからクッキーが設定されますよね。
その後は、同じプロセス(実行中プログラム)内では再度軽いページへのアクセスは不要です。

driver.get("軽いページのURL")
driver.get("商品ページのURLその1")
sleep(1)
driver.get("商品ページのURLその2")
sleep(1)
driver.get("商品ページのURLその3")

Pythonのプログラムコードで説明すると上記のモノとなります。
ただし、別プロセスではクッキーがクリアされていることに注意してください。

他には、セッションを維持する方法も検討しました。
正確には、検討中です。

そのため、今後のことを見据えて、セッション維持の方法を検証していきます。
とりあえず、Amazoが仕掛けてきたボット対策で困っている方は、今回の攻略法で乗り切ってください。

タイトルとURLをコピーしました