質問編集履歴
2
内容を変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Twitte
|
1
|
+
Twitteのタイムラインの3200件以上のスクレイピングについて
|
test
CHANGED
@@ -13,15 +13,11 @@
|
|
13
13
|
なのですべてのアカウントに対して指定期間をしても取得できるようにしたいです。
|
14
14
|
|
15
15
|
### 原因
|
16
|
-
少しいじって分かったことを記載します。
|
17
|
-
|
16
|
+
TwitterAPIは3200件までしか取得できないようになっていますが、それは「取得する件数が3200件まで」だとおもっていました。しかし、アカウントのツイート数がそもそも3200を超えていた場合、2日間の期間のみを取得するために期間指定しても、今回のようにcsvファイルが空白の状態になってしまうのではないかと予想しました。
|
18
|
-
startdate = pd.to_datetime("2015/11/13", utc = True)
|
19
|
-
enddate = pd.to_datetime("2016/4/3", utc = True)
|
20
17
|
|
21
|
-
|
18
|
+
例えば近日の期間指定(2022/1/1~2022/3/1)だと「最新ツイートから3200件を超えていない」ため取得できました。しかし2019年あたりを指定するとやはり空白になってしまいましたのでほぼ原因は突き止められました。
|
22
19
|
|
23
|
-
上記3つの部分を消すと取得できるようです。なぜか期間指定をしてしまうと取得できないアカウントがいくつかあるようです。(公式アカウントもその1つ)
|
24
|
-
|
20
|
+
3200件以上のツイートをしている巨大な公式アカウントのスクレイピングは過去を遡り古いツイートを取得できる方法はないのでしょうか
|
25
21
|
何かアドバイスありましたらよろしくお願いいたします。
|
26
22
|
|
27
23
|
### コード説明
|
1
原因が分かりました
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Twitter公式アカウントのタイムラインのスクレイピング
|
1
|
+
Twitter公式アカウントのタイムラインのスクレイピングについて
|
test
CHANGED
@@ -1,18 +1,31 @@
|
|
1
1
|
### 前提
|
2
2
|
pythonにて、TwitterAPIを介してTwitterをスクレイピングしました。
|
3
|
+
ここでは例としてアニメ「ドラえもん」の公式アカウントのタイムラインを取得しています。
|
3
4
|
|
4
5
|
windows11
|
5
6
|
jupyter notebook (python)
|
6
7
|
ライブラリはtweepyを使用
|
8
|
+
TwitterAPIのアクセスレベルは「Elevated」となっています。
|
7
9
|
|
8
10
|
### 実現したいこと
|
9
11
|
公式アカウント(公式マーク)の入ったタイムラインのみがcsvファイルにうまく収集できないです。
|
10
|
-
公式ではないものは収集できるのですが、公式の場合、エラーも何も出ずに何秒か経ってからcsvファイルが生成されます。中身を観ると空白なので、読み込んではいるけど
|
12
|
+
公式ではないものは収集できるのですが、公式の場合、エラーも何も出ずに何秒か経ってからcsvファイルが生成されます。中身を観ると空白なので、読み込んではいるけどうまく出力できないようです。
|
11
|
-
|
13
|
+
なのですべてのアカウントに対して指定期間をしても取得できるようにしたいです。
|
14
|
+
|
15
|
+
### 原因
|
16
|
+
少しいじって分かったことを記載します。
|
17
|
+
「公式アカウントが取得できない」と述べましたが、正確には公式アカウントのほとんどが期間指定をするとできないことが分かりました。よってコードの
|
18
|
+
startdate = pd.to_datetime("2015/11/13", utc = True)
|
19
|
+
enddate = pd.to_datetime("2016/4/3", utc = True)
|
20
|
+
|
21
|
+
if tweet.created_at < enddate and tweet.created_at > startdate:
|
22
|
+
|
23
|
+
上記3つの部分を消すと取得できるようです。なぜか期間指定をしてしまうと取得できないアカウントがいくつかあるようです。(公式アカウントもその1つ)
|
24
|
+
期間指定しないと最新のものから3200件を取得しますがもっと過去に遡りたいためここでは期間指定を重要としています。
|
12
|
-
|
25
|
+
何かアドバイスありましたらよろしくお願いいたします。
|
13
26
|
|
14
27
|
### コード説明
|
15
|
-
タイムラインの期間指定をするために、UTCをJSTに変換したり
|
28
|
+
タイムラインの期間指定、そしてアカウント作成日時の変数を取得するためにコードの中ほど、UTCをJSTに変換したり、日本時刻に変換したりしています。
|
16
29
|
|
17
30
|
|
18
31
|
### 該当のソースコード
|
@@ -45,7 +58,7 @@
|
|
45
58
|
fmt = "%Y-%m-%d_%H:%M:%S"
|
46
59
|
|
47
60
|
#screen_nameは@から始まる名前(ユーザー名)
|
48
|
-
tweets = tweepy.Cursor(api.user_timeline, screen_name = "
|
61
|
+
tweets = tweepy.Cursor(api.user_timeline, screen_name = "doraemonChannel", exclude_replies = True).items()
|
49
62
|
|
50
63
|
|
51
64
|
#関数: UTCをJSTに変換する
|
@@ -99,7 +112,7 @@
|
|
99
112
|
#tw_dataのリストをpandasのDataFrameに変換
|
100
113
|
df = pd.DataFrame(tweet_data,columns=labels)
|
101
114
|
|
102
|
-
file_name=
|
115
|
+
file_name="doraemon.csv"
|
103
116
|
|
104
117
|
df.to_csv(file_name, encoding='utf-8-sig',index=False)
|
105
118
|
|