BLOG

Twitter API無しでツイートのスクレイピング

2020.11.4
TECH

ハコザキです。
今回はTwintと呼ばれるPythonのスクレイピングツールを使って 自分のツイートを解析してみたいと思います!

Twintとは

TwintはPythonで書かれた高度なTwitterスクレイピングツールで、
TwitterのAPIを使わずにTwitterのプロフィールからツイートをスクレイピングすることができます。

Twitterの機能にも詳細検索がありますが、Twitterのアプリ上でしか見ることができないため、
スクレイピングした結果を利用したい場合はTwintのようなツールを使うか、Twitter APIを使うかになります。

TwintはTwitterの検索機能を利用して下記のことができます

  • 特定のユーザーのツイートをスクレイピング
  • 特定のトピックやハッシュタグ、トレンドに関連したツイートをスクレイピング
  • メールや電話番号などの機密情報をツイートから抽出

Twitter APIと比べて良い点

  • ほぼ全てのツイートを取得できる(Twitter APIでは最後の3200ツイートまでしか取得できない)。
  • 初期設定が早い。
  • 匿名での利用が可能で、Twitter登録なしで利用できる。

単純にツイート検索などする場合はTwintの方が便利です!
※botや自動フォローなどは認証が必要のためTwitterAPIが必要になります

インストール方法

pip3がインストールされていれば大丈夫です!!

$ pip3 install twint

使い方

対象ユーザーの全ツイートを出力(リプライを含む)

$ twint -u hako_mavs
1321304214036008963 2020-10-28 13:14:07 +0900 <hako_mavs> 美味しかったです!!通います!! @kstyle1982  <https://t.co/rQO07IGKQT>
1321242751208321024 2020-10-28 09:09:54 +0900 <hako_mavs> IEよりFirefoxの方が低い  <https://t.co/5xpacGcPJT>
1320949555454603264 2020-10-27 13:44:50 +0900 <hako_mavs> 海外エンジニアのgithubのprofileすごい...レトロが好き  <https://t.co/ieaeDerYbW>
1319227572081704960 2020-10-22 19:42:17 +0900 <hako_mavs> suumo!!  <https://t.co/bd4lsK8id7>
1318451960484229120 2020-10-20 16:20:17 +0900 <hako_mavs> さよなら...!
1317671140064546817 2020-10-18 12:37:35 +0900 <hako_mavs> notion使いこなしたいですね…
1316722945918550017 2020-10-15 21:49:48 +0900 <hako_mavs> 10月もう半分過ぎてしまった!早い!
1316027696984412161 2020-10-13 23:47:08 +0900 <hako_mavs> @alice0de0sho_ 自分も気になってAPIのレスポンス調べてみたんですけど、 厚い雲&gt;曇りがち&gt;雲&gt;薄い雲 となってるみたいです!! 今回OpenWeatherMapというAPI使ったんですけど、公式によるとこんな感じの割合で曇りを分けているみたいです...!  <https://t.co/qs7szTF4oy>
1316019936276299778 2020-10-13 23:16:17 +0900 <hako_mavs> 漢字で入力された地名をローマ字に変換するのハマりそうなので半角英字で...! あとはレスポンシブと時間によって背景変えれば良い感じになりそう  <https://t.co/5HvgiTwIqx>
1314422626991833088 2020-10-09 13:29:09 +0900 <hako_mavs> テキストにふさわしい色を教えてくれるツールすごい  <https://t.co/UmnYS2X12B>
1314197931424063490 2020-10-08 22:36:18 +0900 <hako_mavs> 晴れって星空で表現すれば良いじゃん!盲点!
1313486330123489280 2020-10-06 23:28:39 +0900 <hako_mavs> アニメーション無しでも良い感じなんだけど動かした方がかっこいい...  <https://t.co/HtRERlIs9A>
1312911382765989888 2020-10-05 09:24:01 +0900 <hako_mavs> @alice0de0sho_ ありがとうございます!!曇りはマブスHPでありましたね..!晴れの方は雲がない空を上手く表現できれば晴れっぽくなりそうと思ってました!!
1312756263680274432 2020-10-04 23:07:37 +0900 <hako_mavs> 雨とか雪ってアニメーションで表現しやすいけど曇りとか晴れってどう表現すれば良いか難しい!!  <https://t.co/tIUVkAec7d>
1312751794708115457 2020-10-04 22:49:52 +0900 <hako_mavs> CSSの擬似クラスのhasが使えるようになったら 特定の子要素をもつ親要素のみにCSS指定とかできるっぽいので早く対応してほしい..!!!  <https://t.co/Sn9L9I3h0k>
1311884675724369921 2020-10-02 13:24:14 +0900 <hako_mavs> 10/01付けでマーベリックスに入社しました!!よろしくお願いします!!!  プロフィールページも公開されてますのでよろしければご覧ください...!!  <https://t.co/CgabfJV8Ji>
No more data. finished scraping!! is it though? because sometimes twitter lie.

自分のアカウントはツイート数少ないのでこれくらいですが ユーザーの全ツイートが出力されてしまうので注意が必要です…
1000ツイートのユーザーの場合は1000行出力されます

※ちなみに最後の文章はこんな意味です

No more data. finished scraping!! is it though? because sometimes twitter lie.
(もうデータはありません。スクレイピング終了!! これでいいのかな? ツイッターはたまに嘘をつくことがあるからね。)

ユーザーの全ツイートからキーワードを含むツイートを出力

$ twint -u hako_mavs -s 入社                                                                   
1311884675724369921 2020-10-02 13:24:14 +0900 <hako_mavs> 10/01付けでマーベリックスに入社しました!!よろしくお願いします!!!  プロフィールページも公開されてますのでよろしければご覧ください...!!  <https://t.co/CgabfJV8Ji>
[!] No more data! Scraping will stop now.

※取得できない場合、下記コマンドでtwintを入れ直してみてください!

pip3 install --upgrade git+https://github.com/himanshudabas/twint.git@origin/master#egg=twint

指定日付以降のツイート

例:@tarouo_mavsさんの2020年10月のツイート中から 「カレー」が含まれているツイートを取得

$ twint -u tarouo_mavs -s カレー --since 2020-10-01 --until 2020-10-31 --count
/Users/hakozaki_k/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pandas/compat/__init__.py:120: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError.
  warnings.warn(msg)
1321660039531130880 2020-10-29 12:48:03 +0900 <tarouo_mavs> 弊社代表がインタビューを受けました!ぜひ読んでね⭐️  大好きなカレーの話もしてますよ!
1321302693114220545 2020-10-28 13:08:05 +0900 <tarouo_mavs> チーズキーマカレー激ウマ🧀 今月までなのでお見逃しなく!  オススメの食べ方🍛 1. きた瞬間パリパリチーズを割る 2. 卵を崩さず食べる 3. 卵を崩して食べる 4. 水菜達と混ぜて食べる  あぁ、20分前に食べたけど食べたくなってきた…  @kstyle1982 #札幌 #カレー #bonanza  https://t.co/s75gQSz9Ee
1317718723457806337 2020-10-18 15:46:40 +0900 <tarouo_mavs> 【ブログ更新】  Add:チーズソースキーマカレー🍛  みんな大好きチーズ&カレー! 虜になるに違いない。   https://t.co/Zzsall4bay
1317667271075012608 2020-10-18 12:22:13 +0900 <tarouo_mavs> ルーもスープもうますぎる😭 テイクアウトで時間置いても美味しさ変わらん🍛  さあ、仕事頑張ろう💻 @kstyle1982 #札幌 #カレー #bonanza #ボナンザ  https://t.co/VYU8frDBSo
1317074222825369601 2020-10-16 21:05:39 +0900 <tarouo_mavs> カレー好きな弊社、札幌で1番ワクワクする会社です! 一緒に働けるフロントエンドエンジニアを募集しています🌞  ※フロントエンド経験(web制作経験)必須 ※バックエンド経験(システム開発経験)不問  おっ!と思った方、カレー好きやなぁと感じた方、 ↓↓↓ぜひご覧ください↓↓↓
1316912808890597376 2020-10-16 10:24:15 +0900 <tarouo_mavs> チャットワークもtwitterもカバー写真はスープカレー🍛  あぁ・・美味しそう。  https://t.co/fZTXAjOVPb
1314428717381238791 2020-10-09 13:53:21 +0900 <tarouo_mavs> @umeokaka_sp カレーになりたい!カレーになりたい!カレーになりたい!
1314166426664493056 2020-10-08 20:31:06 +0900 <tarouo_mavs> @menthol_white ありがとうございます!! またカレーいきましょ😆
1314129223682981888 2020-10-08 18:03:16 +0900 <tarouo_mavs> カレー屋さんではありません🍛 web制作もシステム開発も行うスーパーweb屋です🐺  一緒にワクワクできるメンバーを募集しています。 カレー行こうぜ!let'sスパチャー!
1313702768612237313 2020-10-07 13:48:42 +0900 <tarouo_mavs> チーズキーマめちゃうまい🍛 チーズ好きにはたまらなくて今のところ週2くらいで来ちゃう…  そして何よりビジュアルがキレイ😋  @kstyle1982 #カレー #札幌 #ボナンザ  https://t.co/S5VtkRJgUe
1311986070163079169 2020-10-02 20:07:09 +0900 <tarouo_mavs> 行ったぜ!ボナンザ新作🍛  「チーズソースキーマカリー」  ビジュアルがキレイ! キーマとチーズ合いすぎる! 副菜の量がちょうど良い! チーズ好きにはたまらないカレー目でしたよー😆  チーズでマロヤカになるのでキーマは辛口でも良いかも!! @kstyle1982 #bonanza #カレー #札幌  https://t.co/WJ3duASuUn
1311635652128120832 2020-10-01 20:54:43 +0900 <tarouo_mavs> 昨日のカレーはプロジェクトメンバーを引き連れて言ってきました🍛  最近ルー欲がありすぎていつでも食べたい・・ 濃厚カレーはキーマも付いてくるので、大ライスがオススメ😆 @kstyle1982 #bonanza #札幌 #カレー  https://t.co/wCsHn3xBsz
[!] No more data! Scraping will stop now.
found 0 deleted tweets in this search.
[+] Finished: Successfully collected 12 Tweets from @tarouo_mavs.

ふと気になったので大野さんの10月のツイートの中から”カレー”を含んだツイートを抽出してみました…!

–since 2020-10-01で2020年10月01日以降のツイート
–until 2020-10-31で2020年10月31日以前のツイート
–countで出力したツイート数を表示してくれます

いいねが10以上ついているユーザーのツイート

$ twint -u hako_mavs --min-likes 10         
1321304214036008963 2020-10-28 13:14:07 +0900 <hako_mavs> 美味しかったです!!通います!! @kstyle1982  <https://t.co/rQO07IGKQT>
1311884675724369921 2020-10-02 13:24:14 +0900 <hako_mavs> 10/01付けでマーベリックスに入社しました!!よろしくお願いします!!!  プロフィールページも公開されてますのでよろしければご覧ください...!!  <https://t.co/CgabfJV8Ji>
No more data. finished scraping!! is it though? because sometimes twitter lie.

言語指定

例:日本で「Nuxt.js」が含まれている本日のツイート

$ twint -s "Nuxt.js" -l ja --since 2020-10-30 --count
...
...
...
[+] Finished: Successfully collected 10 Tweets.

いいね数の下限

例:いいねが100以上ついている「エンジニア」が含まれている本日のツイート

$ twint -s "エンジニア" --min-likes 100 --since 2020-10-30 --count
...
...
...
[+] Finished: Successfully collected 5 Tweets.

RT数の下限

例:RTが10000以上の「エンジニア」が含まれている2020年のツイート

$ twint -s "エンジニア" --min-retweets 10000 --since 2020-01-01 --count
...
...
...
[+] Finished: Successfully collected 2 Tweets.

取得したツイートを外部ファイルに出力

-oでファイル出力ができます

# test.jsonに出力
$ twint -u hako_mavs -o test.json --json
# test.csvに出力
$ twint -u hako_mavs -o test.csv --csv

外部ファイルに出力することで、
スクレイピングした情報を利用してグラフ作成したり、ツイートを解析したりするときに利用できます

その他オプションは下記にあるのでみてみてください!!

twintproject/twint

The following two tabs change content below.
Kazuki Hakozaki

Kazuki Hakozaki

2020年10月より入社しました!業務では主にフロントエンドを担当しております!
Kazuki Hakozaki

最新記事 by Kazuki Hakozaki (全て見る)