WEBスクレイピングがBANされる3つの理由

WEBスクレイピングがBANされる3つの理由

WEBスクレイピングがBANされる3つの理由

対象サイトが更新して構成が変わったというのは抜きにするとBANの理由には大きく3つのポイントがあります。

  1. 操作のスピートが早すぎる
  2. 画面遷移がおかしい(直接JUMP出来ないページに直接アクセスしてくる)
  3. 過去BOT判定されたIPでアクセスしている

今回はそんなWEBスクレイピングでBANされない為に「してはいけない事」をまとめてみたいと思います。

WEBスクレイピングに「早さ」を求めている場合は再検討を

スクレイピングの実行時間はクライアント側と作成側に【『理想』と『現実』のギャップ】が存在する事があります。かく言う私も納品させていただいたスクレイピングシステムで「遅い」と言われる事があります。

組む側からすると「人の操作を上回るスピードで操作するとBAN食らう可能性高まるけどいい?」と「BANされるとずっと動かなくなるかもしれないけどいい?」となるのですが、そこら辺は『PC = 早い』というイメージが先行しているクライアントさんにはなかなか理解いただけないので辛い所です。

速度について私が言われた事のある内容はこんな感じです。

  • スクレイピングってPCでデータ回収するんだから人がやるより早いでしょ?
  • スクレイピングはプログラムで指示するから一瞬で終わるよね
  • 楽天市場に出品されてる商品の全データを毎日取得したいんだけど出来るでしょ?

そもそも、状況と環境により「手作業より絶対に早い」とは言えません。
例えば、楽天市場から分析データをダウンロードする場合、常時ログインしているPCが存在するのであればそのPCからダウンロードリンクをクリックしてもらった方が早いです。
スクレイピングしようとすればログイン処理から組むことになりますからね。

そして現在はいろんなサイトでBOT対策が進んでいます。
プログラムでのスクレイピングは、サーバーから見ればBOTと同じです(というかBOTです)。

サイト側が構築しているBOT対策として『人間に可能な操作か』を判断しようという趣旨のものがあります。
「1秒間に100回クリック」この命令が来た時点で『人間じゃない事』確定ですよね。
なので、BANされない仕組みを作ろうとすると『それなりの速度で動くスクリプト』となってしまいます。

スクレイピングに限らす、APIでもアクセス数コントロールは必須

ついつい【速度】を求めてしまいがちですが、スクレイピングやAPIでその考えはNGです。
そう、APIを利用しての取得でも同じことです。
最悪回復できないBANを食らいますので規定以上のアクセスや人間離れしたアクセスは止めましょう

画面遷移がおかしい場合、最悪BANされます

接続URLに日々変化する値が入っている事があります。
遷移先のURLを確認しアドレスバーに記載して直接飛ばそうと考えてスクレイピングを組む事があります。
ボタン操作よりもこちらの方が構築楽ですし段取りが少ないので時間短縮にもつながります。

しかし、URLに毎日変更されるフラグが入っている場合、ある得ないURLへのアクセスとなります。
ボタン操作で本来誘導されるURLとは別のURLに直接アクセスをしているのですから「BOTの疑い」が強くなるわけです。

Amazonや楽天市場、Yahoo!ショッピングでは再ログインを求めるメッセージを出したり、アクセス先にデータなないとアナウンスしたりといった動作で返ってくることが多いですが、やり過ぎると【アク禁】になる可能性があります。

過去BOT判定されたIPはずっと利用できない可能性も

IPに限らずドメインも同様です。
私がやらかした実例を記載してみます。

一斉メール配信でドメインが悪者認定

自作のシステムが販売できるレベルまでこぎつけたので宣伝が必要だと考えメール送信自動実行を組みました。
このスクリプトで、スクレイピングで取得した楽天市場の店舗メールアドレスに対して一斉メールを送信しました。
その数、約25,000店舗

さて、この25,000通のメールですが、最初の送信時に時限装置を組み込まなかったんです。
その為、一斉に送信命令を投げてしまい、送信自体はモノの5分程度。
でも、実際送信されていたのは最初から200件程度。
後はBOT判定されて楽天Serverでストップ。
で、その際に記載されたサイトのURLがNG判定を食らいます。

その後はこのドメインが記載されているとメールが届かないと言う事態が発生し、結局メールでの営業を縮小する事になりました。先程実験してみましたが、半年以上たった今でもメール受信に至りませんでした。

別のドメインで試した実験では【1分間に1通(25,000通送信する場合、約15日かかる)】の速度ではNG判定されないようです。でも速攻大量配信とこちらの都合のいいようにはいきませんよね。

IPのブロックであればAWSが解決に役立つ

私は「さくらインターネット」で構築している事が多いのですが、さくらの場合はVPS取得時にIPが固定されその後変更はできません。

一方で、AWSではIPの変更が容易にできます。

IPでブロックされてしまった場合、AWSに乗せ換える事で解決するかもしれません。
ただ、ドメインでブロックされてしまった場合はIP変えても意味はなく、ドメイン自体の変更が必要になります。

スクレイピングのメリットって何?

大きく2つの利点があります。

  1. 決められたルールに従い愚直にコツコツデータを溜めてくれる
  2. 長い文章の中の特定のデータを探しだす

私は店舗の分析情報や登録JAN商品に対して他店が値付けしている価格を調べて蓄積したりといった使い方をしています。こうすると、いつ価格が変動したかがわかるので「あまり変動しない商品」なのか「上下動の激しい商品」なのかが解ります。

まとめ

まだ作成途中ではありますが、今後「商品を出品した方が良いか」の判断をシステムで行えないかと色々と考えています。例えば上下動の幅の中で利益の取れそうにない仕入原価であった場合、これは出品しないとか。

できるだけシステムが自動で判別して人の手が関わるパートを少なくしたい。
そんなシステムを作っていきたいと言うのがシステム屋としての私の方向性です。