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

如何使用snscrape实现每个用户仅抓取一条Twitter推文?

实现每个用户仅抓取一条Twitter推文的解决方案

你的原始代码会抓取到同一用户的多条推文,要实现每个用户仅保留一条,核心思路是通过记录已抓取的用户ID来做去重——因为用户ID是唯一标识,不会重复。

原始代码

loc ='40.4165, -3.70256, 10km'
query = 'geocode:"{}" since:2020-03-15 until:2020-05-01'.format(loc)
tweets_list = []

for tweet in sntwitter.TwitterSearchScraper(query).get_items():
      if i==100:
        break
      tweets_list.append([tweet.date, tweet.user.username, tweet.user.id, tweet.coordinates, tweet.rawContent])

修改后的代码

import snscrape.modules.twitter as sntwitter

loc = '40.4165, -3.70256, 10km'
query = 'geocode:"{}" since:2020-03-15 until:2020-05-01'.format(loc)
tweets_list = []
seen_user_ids = set()  # 用集合存储已抓取的用户ID,保证唯一性
i = 0  # 初始化计数变量

for tweet in sntwitter.TwitterSearchScraper(query).get_items():
    if i == 100:
        break
    # 仅处理未抓取过的用户的推文
    if tweet.user.id not in seen_user_ids:
        seen_user_ids.add(tweet.user.id)
        tweets_list.append([tweet.date, tweet.user.username, tweet.user.id, tweet.coordinates, tweet.rawContent])
        i += 1  # 只有添加新用户的推文时才递增计数

关键说明

  • 使用seen_user_ids集合来跟踪已抓取的用户ID,集合的成员查询操作效率极高(O(1)),不会拖慢遍历速度
  • 只有当用户ID不在集合中时,才将对应推文加入结果列表,同时把ID存入集合做标记
  • 计数变量i仅在成功添加新用户推文时递增,确保最终能收集到最多100个不同用户的推文(如果符合条件的用户数量足够)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:11:31