PythonでTwitterスクレイピング
この記事ではPythonでTwitterをスクレイピングする方法を解説する。twintというライブラリを使うと一瞬で特定のツイートを抽出することができる。
とくに、この記事では次のような方へ向けた内容となっている。
- TwitterのAPIが面倒なのでスクレイピングしたい
- 特定のワードでツイートがあったらSlackへ投稿させたい
- エゴサーチの手間を省きたい
そもそもTwitterをスクレイピングしたかったのは、3番のエゴサーチの手間を省きたいというのが大きい理由である。人気有名人ならまだしも、無名のものがエゴサーチしたところで頻繁に呟かれるはずもない。エゴサーチして「呟かれていない」などと、わざわざ自分で落ち込むような行動はまったくの無駄である。
そこで今回は、特定の検索ワードでTwitterを検索し、呟かれていたらSlackへ投稿されるようにする。また、1日回定時にプログラムを実行させるようにcronへ登録していく。
図1. Incoming WebhooksでツイートURLをSlackへ投稿
これらの作業は次の開発環境で行った。
項目 | バージョン |
---|---|
パソコン | macOS Big Sur 11.0.1 |
Python | 3.7.3 |
twintとは
twintとは、Twitter APIを使わずにツイートを抽出できるPythonライブラリである。Pythonだけでなく、コマンドラインからの実行も可能となっている。
twintのインストール
twintはpip3を使ってインストールできる。しかし次のようにしてインストールすると動かなかった。
$ pip3 install twint
上記の方法で動かない場合は、一度twintをアンインストールして、こちらの方法で再度インストールするとうまく動作できるだろう。
$ pip3 install --user --upgrade git+https://github.com/twintproject/twint.git@origin/master#egg=twint
ただし、コマンドラインで使う場合はパスを通す必要があるかもしれない。
$ export PATH="$PATH:/Users/ユーザー名/Library/Python/3.7/bin"
twintの使い方
特定のユーザーのツイートは次のようにする。ただし、すべてのツイートを取得してしまうので注意しよう。
$ twint -u ユーザー名
特定の検索ワードが含まれているツイートを取得したい場合はこちら。
$ twint -s キーワード
Pythonで使ってみよう!
それではPythonでtwintを使ってみよう。twintで取得したツイートは、csvまたはjsonファイルで保存されるようになっている。
import twint
c = twint.Config()
c.Search = '検索ワード'
c.Limit = 10 # Not working.
c.Store_csv = True
c.Output = "result.csv"
twint.run.Search(c)
検索したツイートをMacへアラート表示するまで
Pythonプログラム
ここでは、検索したツイートをSlackへ登録するまでのプログラムを紹介する。プログラムでやっていることは次の通り。
- 検索ワードで前日から現時点までのツイートをCSVへ保存
- CSVをTweetオブジェクト化して使いやすいようにする
- ツイートがあれば、Webhookを使ってSlackへ投稿
Webhookの設定はこちらの記事を参考に
# Created by Toshihiko Arai.
# https://101010.fun/programming/python-scraping-twitter.html
import twint
import csv
import os
from datetime import datetime, timedelta
import slackweb
output_file = 'result.csv'
class Tweet:
date = ''
time = ''
link = ''
tweet = ''
def fetch_tweet(query):
try:
os.remove(output_file)
except:
pass
c = twint.Config()
c.Search = query
c.Store_csv = True
c.Output = output_file
today = datetime.today()
yesterday = today - timedelta(days=1)
c.Since = datetime.strftime(yesterday, '%Y-%m-%d')
twint.run.Search(c)
def parse_csv():
data = []
i = 0
with open(output_file, 'r', encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
if i == 0:
pass
else:
t = Tweet()
t.date = row[3]
t.time = row[4]
t.tweet = row[10]
t.link = row[20]
data.append(t)
i += 1
return data
def send_slack(t):
webhook_url = 'Webhook URL'
message = "New tweet -> {}".format(t.link)
slack = slackweb.Slack(url=webhook_url)
slack.notify(text=message)
search = '検索ワード'
fetch_tweet(search)
try:
data = parse_csv()
for t in data:
send_slack(t)
except:
pass
cronで定期的に実行
Macでスクリプトを定期的に実行するには、cronが便利だろう。$ crontab -eを実行して、次のように記述する。これは毎日20:00にプログラムを実行するという意味である。
0 20 * * * /usr/local/bin/python3 /SomeWhere/ScrapingTwitter.py
しかしmacOS Big Sur 11.0.1ではデフォルトではcronの実行がされなかった。解決するためには「Full Disc Access」に「cron」を追加する必要がある(図1)。
図1. Full Disc Access」に「cron」を追加
「Full Disc Access」へ「cron」を追加する手順は次の通り。
- 「Security & Privacy」を開く
- 「Privacy」タブを選択
- 「Full Disk Access」を選択
- 編集ロックを外す
- 「+」ボタンを押す
- command⌘ + shift + Gでパスの入力ダイアログを表示(図2)
- 「/usr/sbin/cron」を入力してOKする
以上でcronが実行されるようになった。
「Webスクレイピング」とは、インターネットからデータを機械的に集め、必要な情報を抽出するプロセスのこと。 検索エンジンだけでは限られた情報しか集められませんが、この技術を使えば、インターネット上の膨大な情報の中から本当に必要な情報を入手できます。 小売業、金融業をはじめ多くの業界で情報収集に活用され、アカデミックでも広い分野で使われ注目されています。 本書は、前半でWebスクレイパーとクローラの基礎をていねいに解説し、後半でOCRを使った情報抽出や、JavaScript実行、Seleniumによるインタフェース使用やテスト自動化、自然言語処理などの高度なトピックに加えて法律面の解説など、Webスクレイピングを実際に行うために必要なプログラミングテクニックとテクノロジー全般を紹介します。Python 3.x対応。
Amazon最後まで読んでいただきありがとうございました。
「この記事が参考になったよ」という方は、ぜひ記事をシェアをしていただけるととても嬉しいです。
今後も有益な記事を書くモチベーションにつながりますので、どうかよろしくお願いいたします。↓↓↓↓↓↓↓