PythonでTwitterスクレイピング

PythonでTwitterスクレイピング

この記事ではPythonでTwitterをスクレイピングする方法を解説する。twintというライブラリを使うと一瞬で特定のツイートを抽出することができる。

とくに、この記事では次のような方へ向けた内容となっている。

  1. TwitterのAPIが面倒なのでスクレイピングしたい
  2. 特定のワードでツイートがあったらSlackへ投稿させたい
  3. エゴサーチの手間を省きたい

そもそもTwitterをスクレイピングしたかったのは、3番のエゴサーチの手間を省きたいというのが大きい理由である。人気有名人ならまだしも、無名のものがエゴサーチしたところで頻繁に呟かれるはずもない。エゴサーチして「呟かれていない」などと、わざわざ自分で落ち込むような行動はまったくの無駄である。

そこで今回は、特定の検索ワードでTwitterを検索し、呟かれていたらSlackへ投稿されるようにする。また、1日回定時にプログラムを実行させるようにcronへ登録していく。

図1. Incoming WebhooksでツイートURLをSlackへ投稿
図1. Incoming WebhooksでツイートURLをSlackへ投稿

これらの作業は次の開発環境で行った。

項目バージョン
パソコンmacOS Big Sur 11.0.1
Python3.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へ登録するまでのプログラムを紹介する。プログラムでやっていることは次の通り。

  1. 検索ワードで前日から現時点までのツイートをCSVへ保存
  2. CSVをTweetオブジェクト化して使いやすいようにする
  3. ツイートがあれば、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」を追加
図1. Full Disc Access」に「cron」を追加

「Full Disc Access」へ「cron」を追加する手順は次の通り。

  1. 「Security & Privacy」を開く
  2. 「Privacy」タブを選択
  3. 「Full Disk Access」を選択
  4. 編集ロックを外す
  5. 「+」ボタンを押す
  6. command⌘ + shift + Gでパスの入力ダイアログを表示(図2)
  7. 「/usr/sbin/cron」を入力してOKする

図2. パスの入力ダイアログを表示
図2. パスの入力ダイアログを表示

以上でcronが実行されるようになった。

Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!
Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!

機械学習やデータ分析になくてはならない「データ」。このようなデータは、インターネット上に膨大にありますが、Pythonを使えば効率よくデータ収集できます。こうした手法を「スクレイピング」といいます。

KindleAmazon
PythonによるWebスクレイピング
PythonによるWebスクレイピング

「Webスクレイピング」とは、インターネットからデータを機械的に集め、必要な情報を抽出するプロセスのこと。 検索エンジンだけでは限られた情報しか集められませんが、この技術を使えば、インターネット上の膨大な情報の中から本当に必要な情報を入手できます。 小売業、金融業をはじめ多くの業界で情報収集に活用され、アカデミックでも広い分野で使われ注目されています。 本書は、前半でWebスクレイパーとクローラの基礎をていねいに解説し、後半でOCRを使った情報抽出や、JavaScript実行、Seleniumによるインタフェース使用やテスト自動化、自然言語処理などの高度なトピックに加えて法律面の解説など、Webスクレイピングを実際に行うために必要なプログラミングテクニックとテクノロジー全般を紹介します。Python 3.x対応。

Amazon
スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活
スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活

本書ではPythonを使ったWebスクレイピングテクニックについて解説します。いろいろなことをPythonで自動化していきましょう。日本の主要なサービスを題材に、スクレイピングでデータを取得する方法と、そのデータを元に分析や可視化していく手法を紹介していきます。

KindleAmazon

最後まで読んでいただきありがとうございました。

「この記事が参考になったよ」という方は、ぜひ記事をシェアをしていただけるととても嬉しいです。

今後も有益な記事を書くモチベーションにつながりますので、どうかよろしくお願いいたします。↓↓↓↓↓↓↓

あなたにおすすめ