Twitter 비공식 API에서 트윗과 사용자를 신속하게 스크랩할 수 있는 최신 빠른 Python 라이브러리입니다.
이 도구를 사용하면 검색 문구로 트윗, ID로 트윗, 사용자 이름으로 사용자를 스크랩할 수 있습니다. Twitter API를 사용하며 동일한 API가 웹사이트에서 사용됩니다.
트위트 스크랩을 위해 Twint를 사용했는데 오류도 많고 제대로 작동하지 않습니다. 코드는 이해하기 쉽지 않았습니다. 모든 작업에는 하나의 구성이 있으며 사용자는 정확한 매개변수를 알아야 합니다. 마지막으로 중요한 점은 Api가 변경될 수 있다는 사실입니다. Twitter는 API 소유자이고 변경 사항은 Twitter에 따라 달라집니다. 무언가가 작동하지 않고 사용자가 버그를 문제로 보고해야 하는 것은 짜증나는 일입니다.
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은 웹사이트의 API를 사용하므로 응답 수신에 대한 문서가 없습니다. 응답은 원시로 저장되므로 최종 사용자가 직접 구문 분석해야 합니다. 어쩌면 파서가 기능에 추가될 수도 있습니다.
스크랩된 데이터는 RawDataOutput
추상 클래스를 사용하여 다양한 방법으로 내보낼 수 있습니다. 이러한 출력 목록은 모든 실행기에 전달될 수 있습니다. 예, 두 가지 다른 방법으로 내보낼 수 있습니다.
현재 sweet은 다음을 구현했습니다.
라이브러리는 tor-python-easy와 통합되어 있습니다. 노출된 제어 포트와 함께 Tor 프록시를 사용하여 필요할 때 IP를 변경할 수 있습니다.
Tor 프록시 클라이언트를 사용하려면 사용자 정의 웹 클라이언트를 준비하고 실행기에서 사용해야 합니다.
Tor 프록시를 실행해야 합니다. 로컬 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에서는 다중 페이지 매김을 차단합니다. 때로는 하나의 쿼리에서 3개의 페이지 매김을 호출하는 것이 가능합니다. 이러한 제한을 피하려면 더 작은 부품에 대해 폐기 기간을 나누십시오.
API의 2023 블록에서 Twitter는 시간 범위를 타임스탬프로 표시합니다. YYYY-MM-DD 형식만 허용됩니다. 화살표에는 시간 없이 시간만 입력할 수 있습니다.
라이브러리의 일부는 Twint의 코드를 사용합니다. Twint는 또한 sweet을 만드는 데 주요 영감을 주었습니다.