ねほり.com

何もないから何かみつかる

TwitterからツイートをTwitterScraperでスクレイピングする

   

新コロナウイルスの猛威の中、ゴールデン・ウィークに突入しました。

政府の発表にて小学校の自宅学習は5月末まで延長されたようです。

サラリーマンも同じような状況ですが、これ以上は業績への影響が大きいので、段階的に緩和される傾向です。

 

因みにゴールデン・ウィークにどこにも行けない子供連れの家族は公園に向かうようです。

お砂場が三密状態です。

逆効果じゃない・・・?

 
 

私のWebサイトではTwitter投稿内容をスクレイピングして、サイトに関わるコメントを表示しています。

ですが2017年頃から正しく記事がスクレイピングできておらず放置していました。

さすがにお粗末なので更新してみました。

Twitter APIの制約を確認する

噂には聞いていましたが、Twitter APIは年々制限が厳しくなっています。

特にUser Streams APIが廃止されるなど、サードパーティのクライアントの開発はなかなか難しい状況です。

例えば、Twitterの検索APIを使用すると、15分ごとに180リクエストしか送信できません。

リクエストあたりの最大ツイート数が100であるため、1時間あたり4 x 180 x 100 = 72.000ツイートをマイニングできるだけです。

更に、過去7日間に書かれたツイートにしかアクセスできません。

Twitterのスクレイピング規約は?

Twitter社的には、Twitterの事前の承諾なしにスクレイピングすることは禁止しています。

ユーザーは、本サービスへアクセスし、またはこれを利用している間、次のいずれをも行ってはならないものとします。
…(省略)
Twitterの事前の承諾なしに本サービスのスクレイピングを行うことは明示的に禁じられています

とは言われても、そもそも私はTwitterのユーザ登録していないからユーザじゃない。

そして、Web公開されているパブリックな自分のサイトのコメントデータを手動で収集する代わりに自動でやってるに過ぎません。

なので、他に方法が無いかと調べたら、OSSにTwitterScraperというPythonライブラリがありました。

TwitterScraperを使ってスクレイピングをしてみる

ライブラリは下記です。

https://github.com/taspinar/twitterscraper

Web上によいサンプルが存在しませんでした。

スクレイピング禁止と書かれているため公開するのを躊躇っているのかもしれません。

 

数少ないサンプルを見ながら作成したコードは次のようになります。

poolsize は、同時実行させるスレッドプールの数です。多くすると高速に処理されますが大量のメモリが必要となります。

さくらインターネットサーバーではpoolsize = 10でもキツかったです。

実行結果

実行すると日付順に

ID、ソート用日付、日付、私のサイトURL、Twitterへのリンク、投稿者名、コメント

が出力されます。

例)

617,20200427,2020/04/27,https://私のサイト名/…,/aaaa/status/125483139,太郎,日本人にとってコロナは深刻な問題 https://私のサイト名/?…

どうやってスクレイピングを実現しているか?

実行ログは次のようなものが出力されていました。

TwitterScraperの実装としては、次のような仕組みで同一IPアドレスからのアクセスを回避しているようです。

  • プロセスごとに異なるProxyサーバ経由でアクセスする
  • ランダムにUser-Agentを書き換えながらツイートをスクレイピングする

これ凄いね・・・・。

この考えは他にも応用できそうです。

ソースコード的には次の部分です。

ただし、Proxyサーバーが死んだら使えなくなります。

まとめ

やりたいことは実現できました。

ただし、イタチごっこのような気がします。

感情・流行関係の研究テーマとして、過去のツイート情報は非常に有益だと思いますが、年々厳しくする目的がよく分かりません。

 - 2020年(社会人16年), Web技術, テクノロジー

  関連記事

確定申告消費税未納の督促状が来た・・・

NTTドコモの基本使用料を最安値にしようとドコモショップへ。自分が「ベーシックプ …

品川駅から通勤可能な駅近辺の賃貸一覧

2010年03月12日(金) 品川駅から通勤可能な駅近辺の賃貸一覧 まとめた賃貸 …

ストリーミング動画 のファイルをダウンロードする方法

検索で偶然引っ掛かった誰かも知らない人の日記・・・    メ …

Perlを実践学習し、次にPHPの実践学習を試みる

AI将棋と戦って自分の実力は現在6級。  このまま頑張っても5級が関の …

地震雷火事親父・・オヤジ=台風は嘘っぱち?(1/2)

とうとう新型コロナウイルスが勤務地まで襲ってきました。 〜東京都内で #コロナウ …

twitterの蔑称「バカ発見器」を活用する

2011年08月16日(火) twitterの蔑称「バカ発見器」 「サイトを10 …

地震雷火事親父・・オヤジ=台風は嘘っぱち?(2/2)

新型コロナウイルスの影響でマスクが手に入らず、更にはデマツイートによって トイレ …

動画配信サービスのビジネスモデル(アメリカ編)

現在 日本のライブストリーミングでは、 ニコニコ生放送(ニコ生) Twit Ca …

「平均・分散」の計算を、計算コストを減らして短いソースコードで書く

中間発表が終了。ネットワークが落ちたりと…あまり進んでいませんが…  …

Kaggle の Titanic Prediction Competition でクラス分類(Keras編)

将来が不安です・・・。     先週、上司(センター長、部門 …