LoginSignup
3
4

More than 3 years have passed since last update.

pythonでツイートidからTwitterの詳細情報を集計しよう

Last updated at Posted at 2019-08-10

これまでのあらすじ

以前TweetIDを爆速でスクレイピングしてくる方法をまとめました。TweetIDとは各投稿についているユニークの値です。

今回はそれをもとに投稿テキストやいいね数、リツイート数やメディア数などを集計します。
現在取得してあるツイートIDはテキストファイルに保存されています。

取得するデータ一覧

  • 投稿テキストと文字数
  • 投稿時間(ツイートが投稿された年月日と時間)
  • いいね数/リツイート数
  • 投稿に添付されたメディア(写真や動画)の数
  • 投稿したアカウント(リツイートを除外するために)

因みに投稿時間は、ツイートIDから計算で求めることができます。
以前それについての記事も書いたので、分からない方は見てください。

実際のスクリプト

scrape.py
from bs4 import BeautifulSoup
from time import sleep 
import requests
from datetime import datetime
import pandas as pd
from tqdm import tqdm

#投稿IDから投稿日時を計算する関数
def caluculation(_id):
     unix_time = ((int(_id) >> 22) + 1288834974657) / 1000.0
     date_time = datetime.fromtimestamp(unix_time)
     return date_time

_id_list = []
text_list = []
date_list = []
favo_list = []
retweet_list = []
text_num_list = []
media_num_list = []

#ツイートIDが書いているファイルを開く、またtqdmを使って所要時間を確認したかったので、一旦別のリストに入れた。
with open ('otnk23_id.txt','r',encoding='utf-8') as f:
    for _id in f:
        moment_list.append(_id)

for _id in tqdm(moment_list):

    #投稿URLを作成
    url = 'https://twitter.com/otnk23/status/'+_id
    #投稿URLの末尾の改行文字(\n)を削除
    url = url[:53]
    #スクレイピングをする
    source = requests.get(url)     
    soup = BeautifulSoup(source.text,'lxml')     

    try:         
        account = soup.select_one('.u-linkComplex-target ').text     
    except Exception:         
        account = None              
    try:         
        likes = soup.select_one('.request-favorited-popup > strong').text     
    except Exception:         
        likes = 0  
    try:         
        retweets = soup.select_one('.request-retweeted-popup > strong').text     
    except Exception :          
        retweets = 0     
    try:         
        text = soup.select_one('.TweetTextSize').text     
    except Exception:         
        text = None     
    date = caluculation(_id)     
    try:         
        media = len(soup.select('.AdaptiveMedia-photoContainer'))     
    except Exception:         
        media = 0

#投稿したアカウントが自分だったら、(リツイートじゃなかったら)投稿に関する情報を追加する
    if account == 'otnk23':         
         text_list += [text]          
         date_list += [date]
         favo_list += [likes]
         retweet_list += [retweets]
         text_num_list += [len(text)]         
         media_num_list += [media]
         _id_list += [_id]

#Pandasのデータフレームを作ってデータを保存する
df = pd.DataFrame(
         data={'_id':_id_list,'text': text_list, 'date':date_list , 'likes': favo_list, 'retweets': retweet_list,      'text_num': text_num_list,'media':media_num_list},
         columns=['_id','text', 'date', 'likes', 'retweets', 'text_num','media']
     ) 
#csvに保存する。
df.to_csv('otnk23.csv',index=False)

これでほしかった情報が集まりました。

描画

次回このデータを分析して、データの描画をおこなっていきます。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4