Twint爬取Twitter时间线时Since参数失效仅能爬取近10天内容求助
Twint Since参数失效问题修复方案及替代工具
可行修复方案
- 卸载原有pip安装的官方原版Twint,安装仍在迭代维护的第三方fork版本,官方原版已停止更新超过2年,完全不适配X(原Twitter)现有接口规则,是参数失效的核心原因。
- 修正代码逻辑:
nest_asyncio的加载要放在所有Twint调用之前,不要放在异常捕获块里,否则首次运行会触发异步冲突,导致配置参数加载异常。 - 必须同时配置
Since和Until两个时间参数,当前可正常使用的Twint版本仅单边配置Since时不会触发时间筛选逻辑,默认只会拉取最近10天的推文。 - 新增
c.Full_text = True配置项,避免推文内容截断导致的时间戳匹配失效。
修正后的可运行代码示例:
import nest_asyncio nest_asyncio.apply() import twint c = twint.Config() c.Search = "biden" c.Lang = "en" c.Since = "2021-01-01" c.Until = "2021-02-01" # 可按需求调整结束时间 c.Limit = 5000 c.Pandas = True c.Show_hashtags = False c.Hide_output = True c.Full_text = True twint.run.Search(c) # 爬取结果可直接读取为DataFrame df = twint.storage.panda.Tweets_df
替代爬取工具
如果上述修复后仍无法满足需求,可选用以下更稳定的工具:
- snscrape:无需申请官方API密钥,支持按时间范围、关键词、用户名等维度拉取公开推文,反爬适配更新频率远高于Twint,轻量爬取场景下优先选择。
示例代码:import snscrape.modules.twitter as sntwitter import pandas as pd tweets_list = [] # 时间筛选规则直接写在查询语句中 query = "biden lang:en since:2021-01-01 until:2021-02-01" for i,tweet in enumerate(sntwitter.TwitterSearchScraper(query).get_items()): if i >= 5000: break tweets_list.append([tweet.date, tweet.id, tweet.content, tweet.user.username]) tweets_df = pd.DataFrame(tweets_list, columns=['Datetime', 'Tweet Id', 'Text', 'Username']) - tweepy:X官方适配的SDK,需要提前申请X开发者平台的API密钥,稳定性最高,如有学术研究资质可申请学术API,支持拉取2006年至今的全量公开推文。
- 自定义爬虫:基于Scrapy框架搭配代理池实现,可根据X的前端接口规则自行适配,灵活性最高,适合大规模爬取场景。
内容的提问来源于stack exchange,提问作者Ciaran O Brien
相关产品推荐
相关产品推荐

