Twitter 非公式 API からツイートとユーザーを迅速にスクラップするための最新の高速 Python ライブラリ。
このツールは、検索フレーズごと、ID ごと、ユーザー名ごとにツイートをスクラップするのに役立ちます。 Twitter API を使用します。Web サイトでも同じ API が使用されます。
ツイントを使ってツイートをスクラップしたことがあるのですが、エラーが多くてうまく動作しません。コードは理解するのが簡単ではありませんでした。すべてのタスクには 1 つの構成があり、ユーザーは正確なパラメータを知っている必要があります。最後に重要なことは、API は変更される可能性があるという事実です。Twitter が API の所有者であり、変更はそれに依存します。何かが機能しない場合、ユーザーはバグを問題として報告しなければならないのは面倒です。
pip install -U stweet
私をスポンサーしたい場合は、プロジェクトへの感謝の気持ちとして、暗号通貨を送ってください ?:
コイン | ウォレットアドレス |
---|---|
ビットコイン | 3EajE9DbLvEmBHLRzjDfG86LyZB4jzsZyg |
イーサラム | 0xE43d8C2c7a9af286bc2fc0568e2812151AF9b1FD |
単純なリクエストを行うには、スクラップタスクを準備する必要があります。タスクは ** ランナー ** によって処理される必要があります。
import stweet as st
def try_search ():
search_tweets_task = st . SearchTweetsTask ( all_words = '#covid19' )
output_jl_tweets = st . JsonLineFileRawOutput ( 'output_raw_search_tweets.jl' )
output_jl_users = st . JsonLineFileRawOutput ( 'output_raw_search_users.jl' )
output_print = st . PrintRawOutput ()
st . TweetSearchRunner ( search_tweets_task = search_tweets_task ,
tweet_raw_data_outputs = [ output_print , output_jl_tweets ],
user_raw_data_outputs = [ output_print , output_jl_users ]). run ()
def try_user_scrap ():
user_task = st . GetUsersTask ([ 'iga_swiatek' ])
output_json = st . JsonLineFileRawOutput ( 'output_raw_user.jl' )
output_print = st . PrintRawOutput ()
st . GetUsersRunner ( get_user_task = user_task , raw_data_outputs = [ output_print , output_json ]). run ()
def try_tweet_by_id_scrap ():
id_task = st . TweetsByIdTask ( '1447348840164564994' )
output_json = st . JsonLineFileRawOutput ( 'output_raw_id.jl' )
output_print = st . PrintRawOutput ()
st . TweetsByIdRunner ( tweets_by_id_task = id_task ,
raw_data_outputs = [ output_print , output_json ]). run ()
if __name__ == '__main__' :
try_search ()
try_user_scrap ()
try_tweet_by_id_scrap ()
上の例は、ツイートをスクラップするのに必要なコードは数行であることを示しています。
Stweet は Web サイトからの API を使用するため、応答の受信に関するドキュメントはありません。応答は生として保存されるため、最終ユーザーは自分で解析する必要があります。おそらくパーサーが機能に追加されるでしょう。
スクラップされたデータは、 RawDataOutput
抽象クラスを使用してさまざまな方法でエクスポートできます。これらの出力のリストはすべてのランナーに渡すことができます。はい、2 つの異なる方法でエクスポートできます。
現在、sweet は以下を実装しています。
ライブラリはtor-python-easyと統合されています。これにより、公開された制御ポートで Tor プロキシを使用して、必要なときに IP を変更できるようになります。
Tor プロキシ クライアントを使用する場合は、カスタム Web クライアントを準備し、ランナーで使用する必要があります。
プロキシを実行する必要があります。ローカル OS 上で実行することも、この docker-compose を使用することもできます。
以下のコード スニペットは、プロキシの使用方法を示しています。
import stweet as st
if __name__ == '__main__' :
web_client = st . DefaultTwitterWebClientProvider . get_web_client_preconfigured_for_tor_proxy (
socks_proxy_url = 'socks5://localhost:9050' ,
control_host = 'localhost' ,
control_port = 9051 ,
control_password = 'test1234'
)
search_tweets_task = st . SearchTweetsTask ( all_words = '#covid19' )
output_jl_tweets = st . JsonLineFileRawOutput ( 'output_raw_search_tweets.jl' )
output_jl_users = st . JsonLineFileRawOutput ( 'output_raw_search_users.jl' )
output_print = st . PrintRawOutput ()
st . TweetSearchRunner ( search_tweets_task = search_tweets_task ,
tweet_raw_data_outputs = [ output_print , output_jl_tweets ],
user_raw_data_outputs = [ output_print , output_jl_users ],
web_client = web_client ). run ()
ゲスト クライアント上の Twitter は複数のページネーションをブロックします。場合によっては、1 つのクエリで 3 つのページネーションが呼び出されることがあります。この制限を回避するには、小さな部品の廃棄期間を分割します。
2023 年の Twitter は、タイムスタンプに時間範囲を設定する API をブロックします。YYYY-MM-DD 形式のみが受け入れられます。矢印には時間のない時間のみを入力できます。
ライブラリの一部では、Twint のコードが使用されます。 Twint は、sweet を作成するための主なインスピレーションでもありました。