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

使用snscrape采集Twitter数据遇403错误(免费/基础账号求助)

解决snscrape采集Twitter时的403错误

1. 配置Twitter认证信息

目前Twitter对未认证的爬虫请求限制极严,即便升级到Basic账号,也必须在snscrape中配置认证参数才能正常访问,以下是两种可行配置方式:

方式一:使用API密钥(适配Basic账号)

先在Twitter开发者平台创建项目,获取Bearer Token(API密钥的一种),然后在代码中注入认证:

import snscrape.modules.twitter as sntwitter

# 替换为你的Basic账号对应的Bearer Token
bearer_token = "你的Bearer Token值"
scraper = sntwitter.TwitterSearchScraper("#NoPlandemia", bearerToken=bearer_token)

注意:Basic账号的API有请求额度限制,需控制采集量在平台规定的额度内。

方式二:使用浏览器会话Cookie(适配普通账号)

若不想使用API,可从登录状态的浏览器中复制会话Cookie,配置到scraper:

scraper = sntwitter.TwitterSearchScraper("#NoPlandemia",
    cookies={"auth_token": "你的auth_token值", "ct0": "你的ct0值"}
)

Cookie获取路径:浏览器按F12打开开发者工具 → 切换到Application标签 → 左侧Cookies列表找到https://twitter.com → 复制对应字段值。

2. 降低请求频率,规避反爬限流

403错误也可能是短时间请求量过大触发反爬机制,可在采集循环中添加延迟:

import time
import pandas as pd
from tqdm.notebook import tqdm
import snscrape.modules.twitter as sntwitter

bearer_token = "你的Bearer Token值"
scraper = sntwitter.TwitterSearchScraper("#NoPlandemia", bearerToken=bearer_token)

tweets = []
for i, tweet in tqdm(enumerate(scraper.get_items()), total=100):
    if i >= 100:
        break
    tweets.append([tweet.date, tweet.content, tweet.user.username])
    time.sleep(1)  # 每次采集后延迟1秒

df = pd.DataFrame(tweets, columns=["日期", "推文内容", "用户名"])

3. 优化搜索范围与语法

过宽的搜索范围会增加服务器负载,容易触发限制,可限定时间范围缩小采集规模:

# 限定2023年全年的#NoPlandemia相关推文
scraper = sntwitter.TwitterSearchScraper("#NoPlandemia since:2023-01-01 until:2023-12-31", bearerToken=bearer_token)

4. 确认Basic账号的API权限配置

升级Basic账号后,需在Twitter开发者平台确认:

  • 项目已关联Basic订阅
  • API密钥拥有tweet.read等必要权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:37:06