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

