質問編集履歴

2

内容を変更

2022/11/05 11:21

投稿

Lia
Lia

スコア9

test CHANGED
@@ -1 +1 @@
1
- Twitter公式アカウントのタイムラインのスクレイピングについて
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
- if tweet.created_at < enddate and tweet.created_at > startdate:
18
+ 例えば近日の期間指定(2022/1/1~2022/3/1)だと「最新ツイートから3200件を超えていない」ため取得できました。しかし2019年あたりを指定するとやはり空白になってしまいましたのでほぼ原因は突き止められました。
22
19
 
23
- 上記3つの部分を消すと取得できるようです。なぜか期間指定をしてしまうと取得できないアカウントがいくつかあるようです。(公式アカウントもその1つ)
24
- 期間指定しないと最新のものから3200件を取得ますがもっと過去遡りためここでは期間指定を重要とています。
20
+ 3200件以上のツイートをしている巨大な公式アカウントのスクレイピングは過去遡りツイートを取得きる方法ないのでょうか
25
21
  何かアドバイスありましたらよろしくお願いいたします。
26
22
 
27
23
  ### コード説明

1

原因が分かりました

2022/11/05 00:59

投稿

Lia
Lia

スコア9

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
- それともAPI権限(アクセスレベル)問題でし
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
- 私のレベルは「Elevated」となっています。
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 = "iwatobi_sc", exclude_replies = True).items()
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='Free.csv'
115
+ file_name="doraemon.csv"
103
116
 
104
117
  df.to_csv(file_name, encoding='utf-8-sig',index=False)
105
118