Python Tweepy-限制某些推文

Python Tweepy-限制某些推文,python,csv,twitter,tweepy,Python,Csv,Twitter,Tweepy,我正试图得到下面的代码,以排除任何推特,其中包括从列表中限制的话。最好的方法是什么 这段代码在我跳出流后也只返回最后一条tweet。是否有办法将所有适用的推文打印到CSV import sys import tweepy import csv #pass security information to variables consumer_key = '' consumer_secret = '' access_key = '' access_secret = '' #use variab

我正试图得到下面的代码,以排除任何推特,其中包括从列表中限制的话。最好的方法是什么

这段代码在我跳出流后也只返回最后一条tweet。是否有办法将所有适用的推文打印到CSV

import sys
import tweepy
import csv

#pass security information to variables
consumer_key = ''
consumer_secret = ''
access_key = ''
access_secret = ''


#use variables to access twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)

#create an object called 'customStreamListener'

class CustomStreamListener(tweepy.StreamListener):

    def on_status(self, status):
        print (status.author.screen_name, status.created_at, status.text)
        # Writing status data
        with open('OutputStreaming.csv', 'w') as f:
            writer = csv.writer(f)
            writer.writerow([status.author.screen_name, status.created_at, status.text])


    def on_error(self, status_code):
        print >> sys.stderr, 'Encountered error with status code:', status_code
        return True # Don't kill the stream

    def on_timeout(self):
        print >> sys.stderr, 'Timeout...'
        return True # Don't kill the stream

# Writing csv titles
with open('OutputStreaming.csv', 'w') as f:
        writer = csv.writer(f)
        writer.writerow(['Author', 'Date', 'Text'])

streamingAPI = tweepy.streaming.Stream(auth, CustomStreamListener())
streamingAPI.filter(track=['Hasbro', 'Mattel', 'Lego'])

twitterapi中的表示不能从过滤器中排除术语,只能包括单词和短语。您必须在代码中实现一个附加过滤器,以丢弃包含您不想包含在结果集中的单词的tweet。

无法从过滤器函数中排除术语,但您可以实现自定义选择。 基本上,这个想法是检查推特的文字是否包含不允许的文字。 您可以使用模块简单地标记tweet的文本

nltk主页上的一个简单示例:

>>> import nltk
>>> sentence = """At eight o'clock on Thursday morning
... Arthur didn't feel very good."""
>>> tokens = nltk.word_tokenize(sentence)
>>> tokens
['At', 'eight', "o'clock", 'on', 'Thursday', 'morning',
'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']
显然,在你的例子中,
句子是tweet.text。
因此,在类似以下内容中更改代码:

def on_status(self, status):
    print (status.author.screen_name, status.created_at, status.text)
    is_allowed = True
    banned_words = ['word_1', 'word2', 'another_bad_word']
    words_text = nltk.word_tokenize(status.text)

    # loop banned_words and search if item is in words_text
    for word in banned_words:
        if word in words_text:
            # discard this tweet
            is_allowed = False
            break

    if is_allowed is True:
        # stuff for writing status data
        # ...
此代码尚未经过测试,但向您展示了实现目标的方法


让我知道

我想这才是我真正的问题。在上面的实际代码中实现这一点的最佳方法是什么?Inside on_status执行一个检查,检查status.text,如果文本包含您不感兴趣的单词,则在写入文件之前提前中断。谢谢,我将对此进行检查。您解决了问题吗?仍在破解吗?我认为我在这里很好。我已经让它运行了,但是过滤可能是我需要使用另一个包来进一步研究的东西。我不熟悉如何使用NLTK,但是有一些地方可以比文档更容易地解释如何使用NLTK。