使用snscrape抓取Twitter时无法捕获无效用户名的ValueError问题
解决方法
问题出在实例化TwitterUserScraper对象时就已经抛出了ValueError,而你的try块只包裹了_get_entity()的调用,根本没覆盖到实例化这一步,所以错误自然捕获不到。
调整代码,把TwitterUserScraper的实例化操作也放进try块内:
import snscrape.modules.twitter as twitterScraper try: scraper = twitterScraper.TwitterUserScraper("ksdbdbkvbdvvbdvbsdvbvbdskbksd") if scraper._get_entity(): print(True) except ValueError: print("Not found")
这样当用户名无效时,实例化过程中抛出的ValueError就会被except块捕获,输出预期的"Not found"。
另外注意:_get_entity()是snscrape的私有方法,未来版本可能会有变动,若要更稳定的实现,可以考虑使用公开的迭代器接口间接验证用户存在性,比如尝试获取一条推文:
import snscrape.modules.twitter as twitterScraper username = "ksdbdbkvbdvvbdvbsdvbvbdskbksd" try: # 尝试获取第一条推文,若用户不存在会抛出错误 next(twitterScraper.TwitterUserScraper(username).get_items()) print(True) except (ValueError, StopIteration): print("Not found")
这样既能验证用户存在,又避免依赖私有方法。
内容的提问来源于stack exchange,提问作者Hamza Khan
相关产品推荐
相关产品推荐

