使用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
相关产品推荐
相关产品推荐

