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

Twint抓取推文报错TypeError: replace() argument 2 must be str, not int

错误触发原因

这是Twint官方库的代码缺陷导致的:
format.py的Tweet方法中,replies_count(回复数)、retweets_count(转发数)、likes_count(点赞数)三个字段本身是整数类型,但是代码直接将其作为str.replace()的第二个参数传入,而Python的字符串替换方法要求替换内容必须是字符串类型。哪怕你自定义的Format参数里没有用到{replies}、{retweets}、{likes}这三个占位符,代码还是会强制执行这三次替换操作,因此触发类型错误。你可以看到同文件中其他数值类型的字段(比如video、is_retweet)都主动加了str()做类型转换,只有这三个字段漏掉了处理。

修复方案
  • 方案1(推荐,根本修复):修改Twint安装目录下的twint/format.py文件,找到对应三行代码,给三个整数字段加上str()类型转换即可:
# 原代码
output = output.replace("{replies}", t.replies_count)
output = output.replace("{retweets}", t.retweets_count)
output = output.replace("{likes}", t.likes_count)

# 修改后代码
output = output.replace("{replies}", str(t.replies_count))
output = output.replace("{retweets}", str(t.retweets_count))
output = output.replace("{likes}", str(t.likes_count))

修改保存后重新运行你的爬虫代码即可正常执行,自定义格式也能正常生效。

  • 方案2(无需修改依赖源码):删掉代码中的c.Format配置项,爬取完成后直接从生成的Pandas数据表中提取字段自行拼接你需要的格式:
# 爬取完成后执行
import twint
df = twint.storage.panda.Tweets_df
# 按你的需求拼接输出
for _, row in df.iterrows():
    print(f"Username: {row['username']} |  Tweet: {row['tweet']}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:51:00