スクレイピング禁止のTwitterからツイートを取得する【Python】

スクレイピング禁止のTwitterからツイートを取得する【Python】 プログラミング

Twitterのツイートを取得したいと思いませんか?
Twitterで過去ツイートを探すのが面倒ではありませんか?

そのような場合は、Twitterが用意してくれているAPIの出番です。
でも、このAPIは使えません。
制限が多すぎて、やりたいことができません。

そこで、Twitterをスクレイピングしてしまいましょう。
それが最も効率的です。

「ちょ、Twitterはスクレイピングが禁止だぞ!!」
こういう意見もあるのはわかっています。

この記事では、Twitterはスクレイピング可能であることを解説していきます。
上記の禁止に関する意見を論破します。
論破と言うより、異議主張になりますでしょうかね。

本記事の内容

  • Twitterがスクレイピング禁止と言われる理由
  • Twitterをスクレイピングしてもいいの?
  • Twitterから実際にスクレイピングしてみる

まずは、Twitterのスクレイピングが禁止と言われる理由から見ていきましょう。

Twitterがスクレイピング禁止と言われる理由

Twitterの利用規約より。

スクレイピングに関して述べているのは、次の部分ですね。

Twitterの事前の承諾なしに本サービスのスクレイピングを行うことは明示的に禁じられています

「スクレイピング」と明確に言ってますよね。
この文言により、Twitterがスクレイピング禁止と言われているのでしょう。

Twitterをスクレイピングしてもいいの?

利用規約には、明確にスクレイピングは禁止と書かれています。
だから、Twitterをスクレイピングするのは禁止ですよね。

でも、これは利用規約に書かれているだけです。
利用規約に同意さえしなければ、スクレイピングをしてもいいのでないでしょうか?

利用規約は当事者同士の約束

利用規約とは、お客様(利用者)とサービス提供者の約束です。
だから、その約束は当事者間でしか効果はありません。
そして、その約束を破った場合のペナルティも当事者同士の話に過ぎません。

そうなのです。
利用規約に同意しなければ、利用規約なんて意味がありません。
もちろん、商標や著作権などの別に法律が規定されているモノは遵守すべきです。

なお、Amazonをスクレイピングする際にも、利用規約をもとに判断しています。
詳細は、次ぎの記事をご覧ください。

Twitterはみなし同意を採用

じゃあ、アカウント作成・ログインをしなければ、利用規約なんて関係ないのでは?
普通はそうです。
アカウント作成時やログイン時に利用規約の同意を求められるので。

しかし、Twitterはみなし同意を採用しているのです。

本サービスへのアクセスと利用のためには、本規約に同意しこれを遵守することが条件となります。ユーザーが本サービスへアクセス、または利用した場合には、本規約に拘束されることに同意したことになります。

「利用規約に同意する」をクリックやチェックしなくても、利用規約に同意したことになるようです。
微妙ですよね。

でも、これはこれで認められています。
ただし、みなし同意は不適切な同意の取得にあたる可能性が極めて高いという解釈があります。

そりゃ、そうですよね。
アクセスした時点で利用規約に同意したことになるなんて、冷静に考えたらヤバイです。

ブログやニュース記事にも、普通にTwitterへのリンクはあります。
これをTwitterへのリンクだと知らずにクリックした場合、それでも利用規約に同意したことになるのです。

以上より、みなし同意のおかしさを理解できたと思います。

結局、Twitterのスクレイピングはいいのか?

いいか悪いで言えば、悪いのでしょう。
みなし同意とは言え、利用規約違反になるため。

しかし、私はTwitterをスクレイピングします。
短時間の大量アクセスさえ避ければ、何ら法律的な問題はありません。

あと、スクレイピングしたデータも個人的に分析で利用するだけです。
外部に公開もしません。
よって、著作権の問題も発生しません。

では、利用規約違反の場合にどのようなペナルティを受けるのか?

最悪、アカウント削除です。
利用規約に違反したら、それは仕方がないですよね。
みなし同意とは言え、約束しているわけですから。

ただ、スクレイピングの際は、もちろん未ログインの状態で行います。
ログイン状態にもできますが、そんなことは敢えてしません。

この場合、どうやってTwitterはユーザーを特定するのでしょうか?
私は、Twitterのアカウントを所有しています。

そのアカウントとスクレイピングしてきたプログラムの関連性をどうやって認識するのでしょうか?
そもそも、スクレイピングと通常のアクセスをどうやって区別するか?

正直、Seleniumを使うと判断は無理だと思います。
サーバーへの負荷は絶対に与えない前提で、Twitterのスクレイピングをやってみます。

果たして、アカウントは削除されるのでしょうか?

Twitterから実際にスクレイピングしてみる

実際にやってみました。
PythonでSeleniumを利用してやりました。

結論から言います。
Twitterは、最強の盾を持つかもしれない!?
でも、なんとかスクレイピングできました。

それにしても、Twitterはかなりのスクレイピング対策をしています。
昔はもっと簡単に取得できたのですけどね。

今は、かなりの鉄壁になっています。
悪さをする奴らが多いからでしょうかね。

Seleniumを使わないと無理ゲーかもしれません。
PhantomJSでも、イケるのかもしれませんけど。

本当は、サンプルコードを載せようと考えていました。
しかし、それを解説しようとすると、それだけで結構なボリュームになります。

サンプルコードは、別の記事にまとめる予定です。
それだけで記事になるほど、Twitterのスクレイピング対策は強烈!!

それに、コードにはまだ改善できるところがあります。
それらを改善してから、サンプルコードを載せようと思います。

追記 2020年08月02日
サンプルコードは以下の記事に載せています。

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