使用snscrape爬取Twitter长时间后触发215错误的解决咨询
解决Twitter snscrape的215认证错误
Twitter返回的215错误本质是身份验证失败,说明你的请求未通过Twitter的反爬或身份校验——snscrape直接调用API时未携带合法认证信息,被平台拦截了。以下是具体解决方案:
1. 添加Twitter开发者认证凭据
先在Twitter开发者平台创建项目,获取API Key、API Secret、Access Token、Access Secret,然后通过环境变量或代码传入认证信息:
import os import snscrape.modules.twitter as sntwitter import pandas as pd # 替换为你的开发者凭据 os.environ['SNSCRAPE_TWITTER_API_KEY'] = '你的API Key' os.environ['SNSCRAPE_TWITTER_API_SECRET'] = '你的API Secret' os.environ['SNSCRAPE_TWITTER_ACCESS_TOKEN'] = '你的Access Token' os.environ['SNSCRAPE_TWITTER_ACCESS_SECRET'] = '你的Access Secret' maxTweets = 350000 tweets_list1 = [] user_list = ['lanacionmas','LANACION','Ambitocom','infobae','clarincom'] for user in user_list: scraper = sntwitter.TwitterSearchScraper(f'from:{user} since:2018-01-01 until:2018-12-31') for i, tweet in enumerate(scraper.get_items()): if i >= maxTweets: break tweets_list1.append([tweet.date, tweet.id, tweet.content]) print(f'Done with {user}') # 修正原代码的缩进错误
2. 降低请求频率,避免触发反爬
即使添加了认证,也不要高频请求,可在循环中加入延迟:
import time # 在推文追加后添加延迟 tweets_list1.append([tweet.date, tweet.id, tweet.content]) time.sleep(1) # 间隔1秒,可根据情况调整
3. 使用网页爬取模式(无开发者账号可选)
改用TwitterUserScraper爬取用户主页推文,再过滤时间范围,无需API凭据:
for user in user_list: scraper = sntwitter.TwitterUserScraper(user) for i, tweet in enumerate(scraper.get_items()): if i >= maxTweets: break # 筛选2018年的推文 if tweet.date.year == 2018: tweets_list1.append([tweet.date, tweet.id, tweet.content]) print(f'Done with {user}')
注意:网页模式爬取速度较慢,可能触发IP限制,建议配合代理或轮换网络使用。
4. 检查IP是否被限制
若多次请求失败,大概率是IP被Twitter拉黑,可尝试切换网络(如手机热点)或使用代理IP。
内容的提问来源于stack exchange,提问作者dsilva
相关产品推荐
相关产品推荐

