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

Twint Python库搜索查询抛出TypeError异常的解决办法及替代方案

Twint执行搜索时报TypeError的解决方法及替代工具

我需要从Twitter采集数据,但多次申请Twitter API均被拒绝,因此决定使用Twint Python模块完成该任务。我通过Git安装了其最新版本,随后执行命令twint -s pineapple搜索推文时,出现如下异常:

Traceback (most recent call last):
File "/usr/local/bin/twint", line 33, in sys.exit(load_entry_point('twint==2.1.21', 'console_scripts', 'twint')())
File "/usr/local/lib/python3.6/dist-packages/twint/cli.py", line 339, in run_as_command main()
File "/usr/local/lib/python3.6/dist-packages/twint/cli.py", line 330, in main run.Search(c)
File "/usr/local/lib/python3.6/dist-packages/twint/run.py", line 410, in Search run(config, callback)
File "/usr/local/lib/python3.6/dist-packages/twint/run.py", line 329, in run get_event_loop().run_until_complete(Twint(config).main(callback))
File "/usr/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete return future.result()
File "/usr/local/lib/python3.6/dist-packages/twint/run.py", line 235, in main await task
File "/usr/local/lib/python3.6/dist-packages/twint/run.py", line 286, in run await self.tweets()
File "/usr/local/lib/python3.6/dist-packages/twint/run.py", line 217, in tweets await self.Feed()
File "/usr/local/lib/python3.6/dist-packages/twint/run.py", line 62, in Feed response = await get.RequestUrl(self.config, self.init)
File "/usr/local/lib/python3.6/dist-packages/twint/get.py", line 135, in RequestUrl response = await Request(_url, params=params, connector=_connector, headers=_headers)
File "/usr/local/lib/python3.6/dist-packages/twint/get.py", line 161, in Request return await Response(session, _url, params)
File "/usr/local/lib/python3.6/dist-packages/twint/get.py", line 167, in Response async with session.get(_url, ssl=True, params=params, proxy=httpproxy) as response:
File "/usr/local/lib/python3.6/dist-packages/aiohttp/client.py", line 855, in __aenter__ self._resp = await self._coro
File "/usr/local/lib/python3.6/dist-packages/aiohttp/client.py", line 361, in _request ssl=ssl, proxy_headers=proxy_headers, traces=traces)
File "/usr/local/lib/python3.6/dist-packages/aiohttp/client_reqrep.py", line 207, in __init__ url2 = url.with_query(params)
File "/usr/local/lib/python3.6/dist-packages/yarl/__init__.py", line 857, in with_query new_query = self._get_str_query(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/yarl/__init__.py", line 837, in _get_str_query for k, v in query)
File "/usr/local/lib/python3.6/dist-packages/yarl/__init__.py", line 837, in <genexpr> for k, v in query)
File "yarl/_quoting.pyx", line 226, in yarl._quoting._Quoter.__call__ TypeError: Argument should be str

我的Ubuntu系统安装的Python版本为3.6,在Python脚本中导入Twint调用时也出现了相同异常。请问该如何解决此问题?是否有合适的替代工具完成该任务?

一、解决Twint的TypeError问题

这个错误我之前在Python3.6环境下用Twint时也碰到过,根源是yarl库的版本和Python3.6不兼容——yarl在1.7.0及以上版本开始不再完全支持Python3.6的字符串处理逻辑,而Twint依赖的aiohttp又会自动安装高版本的yarl,导致参数传递时出现类型错误。

解决步骤很简单,只需要降级yarl到兼容Python3.6的版本:

  1. 先卸载当前的yarl版本:
pip uninstall yarl -y
  1. 安装兼容的1.6.3版本:
pip install yarl==1.6.3

完成后再重新运行twint -s pineapple,应该就能正常搜索了。如果还是有问题,可以尝试同时指定aiohttp的版本为3.7.4.post0(这个版本和yarl1.6.3适配很好):

pip install aiohttp==3.7.4.post0

二、替代工具推荐

如果Twint后续还是出现各种兼容性问题,或者你需要更稳定的采集方案,这几个工具可以试试:

  • Snscrape:无API限制的轻量级爬虫,支持Twitter、Facebook等多个平台。用法非常简单,比如搜索包含pineapple的推文:

    snscrape twitter-search "pineapple"
    

    还可以通过Python脚本调用,直接把结果导出为CSV,适合批量采集,而且维护比较活跃,兼容性好。

  • Scweet:基于Selenium的Twitter爬虫,模拟真实浏览器操作,不需要API。虽然速度比Twint慢,但不容易被Twitter检测到,适合小规模数据采集。可以通过Python脚本控制,支持采集用户推文、热门话题等内容。

  • Tweepy(学术版API):如果你的采集需求是学术研究,可以尝试申请Twitter的学术研究API,这个通道的审核比普通API宽松很多。Tweepy是官方推荐的Python客户端,稳定性和数据完整性都有保障,适合大规模、长期的数据采集。

内容的提问来源于stack exchange,提问作者Hafiz Muhammad Shafiq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:07:38