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

使用Python的snscrape爬取Twitter报错,求技术解决方案

解决snscrape爬取Twitter时的non-200状态码报错

你遇到的报错是Twitter反爬机制拦截了无授权的频繁请求导致的,以下是可行的解决步骤:

  • 降低请求频率,添加延迟
    在循环中每次获取推文后加入短暂延迟,避免触发Twitter的频率限制。修改后的代码如下:

    import time
    pd.options.display.max_colwidth = 500
    query = "(music) lang:en since:2023-01-01 until:2023-02-02" 
    tweets = []
    limit = 10
    get_ipython().run_line_magic('time', '')
    try:
        print("start scraping")
        for tweet in sntwitter.TwitterSearchScraper(query=query, top=True).get_items():
            if len(tweets) == limit:
                break
            tweets.append([tweet.date, tweet.user.username, tweet.content])
            time.sleep(1)  # 每次请求后延迟1秒
        df = pd.DataFrame(tweets, columns=['datetime', 'username', 'content'])
    except Exception as e:
        print(e)
    
    print("Finished")
    print("-------")
    
  • 更新snscrape到最新版本
    旧版本可能存在与Twitter接口不兼容的问题,执行命令更新:

    pip install --upgrade snscrape
    
  • 设置自定义请求头(User-Agent)
    模拟浏览器请求,避免被识别为爬虫:

    import snscrape.modules.twitter as sntwitter
    
    # 替换为常见浏览器的User-Agent
    sntwitter.TwitterSearchScraper._getHeaders = lambda self: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    
    # 后续爬取代码保持不变
    
  • 检查查询语句一致性
    注意到报错信息中的查询是(Gempa) lang:id,但你的代码中是(music) lang:en,可能是缓存残留或旧请求影响,确保当前运行的代码与查询语句完全匹配。

如果以上方法仍无效,建议使用Twitter官方API(需申请开发者账号),这是最稳定的爬取方式,不会受到反爬限制。

内容的提问来源于stack exchange,提问作者Joko Ade Nursiyono

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:45:20