能否不使用track参数调用Tweepy的filter函数获取指定语言推文?
解决Tweepy获取特定语言全量实时推文的问题
我来帮你理清这个Tweepy流式推文获取的问题,咱们一步步拆解:
为什么你之前的尝试失败了?
- 直接调用
stream.filter(languages=['el'])报406错误:Twitter的Standard Streaming API明确要求必须指定至少一个过滤条件(track、follow或locations),只传languages不符合API的请求规范,所以会返回406 Not Acceptable错误。 - 用
track=['*']无效:Twitter的track参数不支持通配符逻辑,它会把*当成普通关键词来匹配,所以只会抓取包含*符号的希腊语推文,完全不是你想要的全量内容。
关于stream.sample()的问题
你提到调用stream.sample(languages=['el'])时速度极慢,这是正常现象:Twitter的Sample流是从所有实时推文中随机抽取约1%的样本,而希腊语推文在全量推文中占比本来就很低,所以采样到的数量自然稀少,这是官方API的固有限制,没法直接改变。
不用stream.sample()的替代方案
既然Standard API不允许直接获取全量特定语言推文,咱们可以用以下两种方法来尽可能覆盖更多目标内容:
方案1:用小语种高频停用词作为track关键词
几乎所有希腊语推文都会包含一些高频停用词(比如冠词、代词、常用动词),把这些词作为track的列表,再结合languages=['el']参数,就能捕获绝大多数希腊语推文,同时满足API的过滤条件要求。
示例代码:
# 希腊语高频停用词列表(可根据需求补充更多) greek_high_freq_words = ['ο', 'η', 'το', 'των', 'της', 'του', 'είμαι', 'είναι', 'και', 'στην', 'στη'] stream.filter(track=greek_high_freq_words, languages=['el'])
这个方法的优势是能覆盖绝大多数日常希腊语推文,而且不会像Sample流那样数量稀少。
方案2:结合locations参数(如果需求是特定区域)
如果你的目标是获取希腊本土的希腊语推文,可以指定希腊的地理坐标范围作为locations参数,再搭配languages=['el'],这样能精准捕获该区域的相关推文。
示例代码:
# 希腊的地理边界坐标格式:[西经, 南纬, 东经, 北纬] greece_bounds = [19.0, 35.0, 29.0, 42.0] stream.filter(locations=greece_bounds, languages=['el'])
额外说明
如果需要真正的全量特定语言推文,只有Twitter的Enterprise API才能提供,但这需要付费且有准入门槛。对于普通开发者来说,上面的两种方案是Standard API范围内的最优解。
内容的提问来源于stack exchange,提问作者Aventinus
相关产品推荐
相关产品推荐

