在重读您的原始问题时,我意识到您提出了 许多 较小的问题。我将在这里尝试回答其中的大多数问题,但实际上可能有人会问一个关于SO的单独问题。
- 为什么添加会破坏它
on_data
?
没有看到实际的错误,很难说。在我重新生成用户/访问密钥之前,它实际上对我不起作用,我会尝试一下。
有几件事我可能会做的与您的回答有所不同。
tweets是全局列表。这意味着,如果您有多个
StreamListeners(即在多个线程中),则 任何 流侦听器收集的 每个
推文都将添加到此列表中。这是因为Python中的列表是指内存中的位置-如果这令人困惑,那么这是我的意思的基本示例: __
>>> bar = []>>> foo = bar>>> foo.append(7)>>> print bar[7]
请注意,即使您认为将7附加到
foo,
foo并且
bar实际上指的是同一件事(因此更改一项都会改变两者)。
如果您打算这样做,这是一个很好的解决方案。但是,如果您打算将推文与其他听众分开,则可能会非常头痛。我个人会像这样构造我的课程:
class CustomStreamListener(tweepy.StreamListener): def __init__(self, api): self.api = api super(tweepy.StreamListener, self).__init__() self.list_of_tweets = []
这会将推文列表更改为仅在您的课程范围内。另外,我认为这是适当的属性名称从改变
self.save_file到
self.list_of_tweets,因为你还命名
文件
,你追加鸣叫
save_file。尽管这不会严格导致错误,但是让我感到困惑的
self.save_file是列表和
save_file文件。它可以帮助将来的您和其他读取您的代码的人弄清楚到底做什么/是什么。
有关变量命名的更多信息。
在我的评论中,我提到您不应将其
file用作变量名。
file是Python的内置函数,可构造一个新的type对象
file。从技术上讲,您可以覆盖它,但这是一个非常糟糕的主意。有关更多内置函数,请参见Python文档。
- 如何过滤多个关键字的结果?
OR在这种类型的搜索中,所有关键字都在一起,来源:
sapi.filter(track=['twitter', 'python', 'tweepy'])
这意味着它将获得包含“ twitter”,“ python”或“
tweepy”的推文。如果您希望
AND所有术语都用()合并,则必须通过对要搜索的所有术语列表中的一条推文进行后处理。
- 如何根据位置AND关键字过滤结果?
我实际上只是意识到,您确实像我要建议的那样问这个问题。正则表达式后处理解决方案是实现此目的的好方法。您还可以尝试按位置
和 关键字进行过滤,如下所示:
sapi.filter(locations=[103.60998,1.25752,104.03295,1.44973], track=['twitter'])
- 存储/处理推文的最佳方法是什么?
这取决于您要收集多少。我非常喜欢数据库,尤其是如果您打算对很多推文进行情感分析。当您收集数据时,您应该 只
收集您需要的东西。这意味着,当您将结果保存到数据库中/在
on_data方法中的任何位置时,都应从JSON中提取重要部分,而不保存其他任何内容。例如,如果您要查看品牌,国家和时间,则只需考虑以下三点:不要保存该tweet的整个JSON转储,因为它只会占用不必要的空间。



