You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Twitter包采集Twitter坐标数据时返回coordinates: None的问题

解决Twitter流采集地理数据返回coordinates: None的问题

我来帮你梳理下这个问题,主要涉及Twitter Stream API的参数使用和推文地理信息的获取条件:

1. 你用的geo=True参数是无效的

Twitter Stream API的statuses.filter端点并不支持geo这个参数,这是你没拿到地理数据的核心原因之一。要过滤带地理信息的推文,你需要用以下两个有效参数之一:

  • locations:指定一个经纬度边界框,格式为min_longitude,min_latitude,max_longitude,max_latitude。只有推文中的精确坐标落在这个范围内的才会被返回。比如要获取全球范围的带地理信息的推文,可以设置locations="-180,-90,180,90"。
  • 地点关键词组合:可以在track参数中结合关键词和地点过滤,比如track="candy place:US",这样会返回提及"candy"且关联美国地点的推文,但这种方式返回的是place字段(大致位置),不一定有精确的coordinates。

2. 即使参数正确,coordinates仍可能为None的原因

就算你用对了参数,也不是所有符合条件的推文都会有精确坐标,因为:

  • 用户发推时必须主动开启并共享精确位置(很多用户会关闭位置服务,或者只选择共享大致的地点而非精确坐标)
  • 用户的Twitter账号设置中允许共享位置信息
  • 推文的位置信息如果是大致的地点(比如城市),只会填充place字段,而coordinates字段会是None

3. 修正后的代码示例

先修复你代码里的语法错误(多了个多余的stream关键字),再加上正确的地理过滤参数:

from twitter import TwitterStream
from email.utils import parsedate

# 假设你已经正确初始化了auth认证对象
stream = TwitterStream(auth=auth, secure=True)
search_term = "candy"
# 使用locations参数指定全球范围,过滤带精确坐标的推文
tweet_stream = stream.statuses.filter(track=search_term, language='en', locations="-180,-90,180,90")

collected_tweets = []
for tweet in tweet_stream:
    # 可以先判断精确坐标是否存在再收集
    if tweet.get('coordinates') is not None:
        collected_tweets.append(tweet)
    # 也可以同时收集带大致地点的推文,即使没有精确坐标
    # elif tweet.get('place') is not None:
    #     collected_tweets.append(tweet)

额外提示

  • 如果你需要更精准的地理范围,可以缩小locations的边界框,比如美国本土的范围大概是-125,24,-66,49
  • 可以同时监听coordinates和place字段,前者是精确经纬度,后者是结构化的地点信息(比如城市、国家)

内容的提问来源于stack exchange,提问作者Homesand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:54:31