Kaggle用Twint无API爬取推特时报This event loop already running错误如何解决
报错原因
该错误是Kaggle笔记本底层的Jupyter内核默认已运行一个asyncio事件循环,twint内部异步逻辑会尝试创建新的事件循环,二者冲突导致抛出异常。
解决步骤
- 第一步:在所有twint相关代码的最开头,先运行以下代码安装并启用嵌套事件循环补丁:
!pip install nest_asyncio import nest_asyncio nest_asyncio.apply()
- 第二步:调整你的twint配置,新增
Force_thread参数强制twint用独立线程运行异步逻辑,避免和内核默认事件循环冲突,修改后的函数代码如下:
#Cities list of Pakistan all_cities = ["Bagh", ...] def scrape_by_city(keywords, since, outfile): unique_cities=set(all_cities) #To get unique cities of country cities = sorted(unique_cities) #Sort & convert datatype to list for city in cities: print(city) c = twint.Config() c.Search = keywords #search keyword c.Since = since c.Store_csv = True c.Output = "./" + outfile c.Near = city c.Hide_output = True c.Count = True c.Stats = True c.Resume = 'resume.txt' # 新增以下兼容配置 c.Force_thread = True twint.run.Search(c) scrape_by_city('', '2020-08-5 15:55:00', 'Pakistan_Tweets_Dataset.csv')
额外说明
如果爬取过程中出现中断,你可以直接重新运行函数,resume.txt会记录断点位置,输出的csv文件也会自动追加新数据,不会覆盖之前已经爬取的内容。
内容的提问来源于stack exchange,提问作者Soheil Paper
相关产品推荐
相关产品推荐

