twint库搜索每次返回推文数量不一致且limit参数不生效如何解决
问题成因
- 反爬机制与接口不稳定:twint基于推特前端公开非官方接口实现数据抓取,推特的动态反爬策略会随机拦截部分请求、或返回差异的时间线内容,同时部分已删除、设为隐私可见的推文会被自动过滤,导致每次运行返回的推文数量不一致。
- limit参数逻辑与缓存干扰:twint的limit参数为拉取批次的阈值,单批次默认返回20条左右推文,不是精确的返回条数控制;同时你当前代码未配置覆盖写入,每次运行会把新结果追加到旧的
dogecoin.csv文件中,也会导致最终读取的计数出现偏差。
解决方案
- 新增反爬与写入配置,避免结果波动:
新增重试、请求间隔配置,同时设置关闭追加写入,每次运行覆盖旧csv文件,修改后的代码参考:
import os # 运行前先删除旧文件,避免历史数据干扰 if os.path.exists("dogecoin.csv"): os.remove("dogecoin.csv") config1= twint.Config() config1.Username = "dogecoin" config1.Hide_output=True config1.Store_csv = True config1.Store_object = True # 新增重试、请求间隔配置,降低反爬拦截概率 config1.Retries = 5 config1.Sleep = 2 # 关闭追加写入,强制覆盖 config1.Append = False # limit设置为20的整数倍,设置为目标条数的2~3倍避免过滤后数量不足 config1.limit=20 config1.Output = "dogecoin.csv" twint.run.Search(config1) df1= pd1.read_csv('dogecoin.csv') # 按id去重后取前10条,实现精确条数控制 df1 = df1.drop_duplicates(subset='id', keep='first').head(10) print(df1['tweet'])
- 手动控制返回条数:不要依赖limit参数做精确条数控制,拉取完成后通过pandas的
head()方法截取指定数量的结果即可,同时增加去重逻辑避免重复数据干扰。
内容的提问来源于stack exchange,提问作者Ankit
相关产品推荐
相关产品推荐

