##これまでのあらすじ
以前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)
これでほしかった情報が集まりました。
##描画
次回このデータを分析して、データの描画をおこなっていきます。