仅按语言筛选 Twitter 动态

24

我正在使用Tweepy API提取Twitter动态。我想只提取特定语言的所有Twitter动态。语言过滤器仅在提供了track筛选器时起作用。以下代码返回406错误:

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
stream.filter(languages=["en"])

我该如何使用Tweepy提取特定语言的所有推文?


你解决了这个问题吗?我也想要提取特定语言的推文,比如日语。 - tktktk0711
7个回答

28
你没有特殊权限的话是无法这样做的。要流式传输所有推文(未经过滤),需要连接到Twitter提供的firehose,这只在特定用例中由Twitter授权。老实说,firehose并不是必需的——正确使用track就可以获得更多的推文了。
试着使用类似下面这样的东西:
stream.filter(languages=["en"], track=["a", "the", "i", "you", "u"]) # etc

过滤这样的词会得到很多推文。如果您想要最常用单词的真实数据,请查看《时代》杂志上的这篇文章:Twitter 上使用最频繁的 500 个单词。您可以使用 高达 400 个 关键词,但这可能接近给定时间间隔内推文的 1% 限制。如果您的 track 参数匹配给定时间内所有推文的 60%,您仍然只会获得 1%(这是很多推文)。

我正在输入 stream.filter(lang=["en"], track=["something"])。谢谢! - Krishh

8
尝试在Cursor()中使用lang='en'参数,例如:tweepy.Cursor(.. lang='en')

4
除了直接获取筛选后的推文外,您还可以在获取不同语言的所有推文后进行筛选,方法如下:
除了直接获取筛选后的推文外,您还可以在获取不同语言的所有推文后进行筛选。
tweets = api.search("python")
for tweet in tweets:
   if tweet.lang == "en":
      print(tweet.text)
      #Do the stuff here

希望这能有所帮助。

2
你可以在Github代码中查看track方法的参数https://github.com/tweepy/tweepy/blob/master/tweepy/streaming.py
将语言以ISO_639-1代码的数组形式放置。
它们是:
filter(self, follow=None, track=None, is_async=False, locations=None,
               stall_warnings=False, languages=None, encoding='utf8', filter_level=None):

要按语言跟踪,只需添加:

最初的回答

class Listener(StreamListener):

    def on_data(self, data):
        j = json.loads(data)
        t = {
          'screenName' : j['user']['screen_name'],
          'text:': j['text']
          }
        print(t)
        return(True)

    def on_status(self, status):
        print(status.text)


auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

stream = Stream(auth=auth, listener=Listener(),wait_on_rate_limit=True,wait_on_rate_limit_notify=True)

stream.filter(track=['Trump'],languages=["en","fr","es"])

1

Tweepy搜索允许获取特定语言的推文。您可以使用ISO 639-1代码来指定语言参数的值。 以下代码将获取指定语言(例如下面的英语)的完整文本推文。

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)
    tweets = api.search(q = keywordtosearch, lang = 'en', count = 100, truncated = False, tweet_mode = 'extended')
    for tweet in tweets:
        print(tweet.full_text)
        #add your code

尝试了你的代码,出现了“AttributeError: 'API' object has no attribute 'search'”错误。 - Maged Saeed
1
将“search”替换为“search_tweets”。 - Bruno Gois

0

通过使用GetOldTweets3(https://pypi.org/project/GetOldTweets3/),您可以通过以下几个条件进行过滤来下载推文(甚至是旧的):

tweetCriteria = got.manager.TweetCriteria().setQuerySearch('Coronavirus')\
                                       .setSince("2020-02-15")\
                                       .setUntil("2020-03-29")\
                                       .setMaxTweets(5)\
                                       .setNear('India')\
                                       .setLang('en')
tweets = got.manager.TweetManager.getTweets(tweetCriteria)
for tweet in tweets:
    print(tweet.text)
    print(tweet.date)
    print(tweet.geo)
    print(tweet.id)
    print(tweet.permalink)
    print(tweet.username)
    print(tweet.retweets)
    print(tweet.favorites)
    print(tweet.mentions)
    print(tweet.hashtags)
    print('*'*50)

0

这对我有用。

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
a=input("Enter Tag: ")
tweets = api.search(a, count=200)
a=[]
for tweet in tweets:
    if tweet.lang == "en":
        a.append(tweet.text)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接