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

如何使用Snscrape抓取仅过去一小时内的Twitter推文?

问题分析与修复方案

你的代码主要是时间格式和查询语法出了问题,导致无法正确筛选过去一小时的推文:

核心问题点

  • 时间格式错误:Snscrape适配的Twitter搜索时间参数不需要微秒(%f),且datetime.utcnow()是无时区感知对象,%z会输出空字符串,导致时间条件不生效。
  • 查询参数大小写错误:Twitter搜索的since:和until:参数必须小写,你写的Since:会被忽略。

修正后的代码

import pandas as pd
import snscrape.modules.twitter as sntwitter
from datetime import datetime, timedelta

# 获取当前带时区的UTC时间
now = datetime.now(datetime.timezone.utc)
since = now - timedelta(hours=1)

# 转换为Snscrape要求的UTC时间格式:YYYY-MM-DD HH:MM:SS
since_str = since.strftime('%Y-%m-%d %H:%M:%S')
until_str = now.strftime('%Y-%m-%d %H:%M:%S')

# 修正查询语法:参数名小写,格式符合要求
query = '#SOSREX since:' + since_str + ' until:' + until_str
SOSREX_data = []

for tweet in sntwitter.TwitterSearchScraper(query).get_items():
    if len(SOSREX_data) > 100:
        break
    SOSREX_data.append([
        tweet.date, tweet.user.username, tweet.user.displayname,
        tweet.content, tweet.likeCount, tweet.retweetCount,
        tweet.sourceLabel, tweet.user.followersCount, tweet.user.location
    ])

Tweets_data = pd.DataFrame(
    SOSREX_data,
    columns=[
        "Date_tweeted", "username", "display_name",
        "Tweets", "Number_of_Likes", "Number_retweets",
        "Source_of_Tweet", "number_of_followers", "location"
    ]
)

关键调整说明

  1. 改用datetime.now(datetime.timezone.utc)获取带时区的UTC时间,确保时间戳准确匹配Twitter的时间规则。
  2. 去掉时间格式中的微秒(%f)和时区标识(%z),Twitter搜索默认使用UTC,不需要额外标注。
  3. 将查询中的Since:改为小写的since:,严格遵循Twitter搜索的语法规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:18