【问题标题】:removing a no longer existing twitter user from a list (using Tweepy)从列表中删除不再存在的 twitter 用户(使用 Tweepy)
【发布时间】:2018-05-03 04:57:46
【问题描述】:

您好,我一直在尝试从列表中删除不存在的 Twitter 用户。我想这样做的原因是因为超时运行我的代码,一些 twitter 用户不再存在,我得到了这个错误

kages/tweepy-3.6.0-py3.6.egg/tweepy/binder.py", line 234, in execute
tweepy.error.TweepError: [{'code': 34, 'message': 'Sorry, that page does not exist.'}]

我无法完成收集我的数据,因为这个错误一直停止运行代码表单,所以我一直在手动逐个浏览我的列表并查找 Twitter 上不存在的 Twitter 帐户,这非常低效。 因此,我一直在尝试使用 try except 块来覆盖此代码,例如删除不再存在的用户名并继续运行我的程序,但我尝试的所有操作都不起作用。这是我的尝试,除了没有 tweepy 的块(只是常规代码),它可以工作。

l=["b",23,"c",6,5]
print(l)
for i in range(0,10):
    try:
        for a in l:
            print("a=",int(a))
    except ValueError:
        l.remove(a)
        print(l)
        continue
    else:
        print(l)
        continue

现在我尝试在我的推特列表中实现它

pro_trump=['TruthSerum888','karlyherron', 'R41nB14ck', 'RedApplePol', 'MKhaoS_86']
for i in range(0,3):
    try:
        for screen_name in pro_trump:
            user_followers=api.friends_ids(id=screen_name)# this returns the interger value of the user id a sepcifc user is following

    except tweepy.error.TweepError:
        print("screen_name that failed=",  screen_name)
        pro_trump.remove(screen_name)
        print(pro_trump)
        continue
    else:# if no error
        print(pro_trump)
        continue

但它不起作用。它只是通过 pro_trump 列表从列表中删除每个用户名,无论高音扬声器帐户是否仍然存在。 有人可以帮我实现我真正希望我的代码能做的事情吗?

【问题讨论】:

  • 你可以在运行这段代码时添加打印语句的结果吗?另外,for i in range(0,3) 循环是做什么用的?
  • for i 循环是通过列表返回,所以基本上第一次循环在 try: 面临错误时,它会转到 except 并从循环中删除错误,以便继续查找更多错误(即不再存在的帐户) for 循环继续循环通过 pro_trump 列表。我会在短时间内上传一些输出。我正在尝试再次运行代码,像往常一样,twitter 的速率是有限的,所以我必须等待 15 分钟才能做任何新的事情:/
  • 当我尝试你的代码时,我注意到当我遇到任何类型的 Tweepy 错误,甚至是速率限制错误时,它都会触发 except 并导致它删除 ID。这可能就是发生的事情。否则你的代码在我的最后工作。

标签: python python-3.x twitter tweepy


【解决方案1】:

问题是由您调用api.friends_ids 引起的,这会引发超出速率限制的错误。这反过来会在每个循环中触发except 代码块,无论screen-name 是否正确。没有速率限制错误,代码按原样工作。我用api.get_user(id=screen_name) 替换了那个电话来测试。您可以在except 中包含一个if-else 块,以便仅在出现正确错误时删除用户。我还优化了您的代码,将for 循环放在try-except 块之外。

pro_trump=['TruthSerum888','karlyherron', 'R41nB14ck', 'RedApplePol', 'MKhaoS_86']
for screen_name in pro_trump:
    try:
        user_followers=api.friends_ids(id=screen_name)# this returns the interger value of the user id a sepcifc user is following

    except tweepy.error.TweepError as t:
        if t.message[0]['code'] == 50: # The code corresponding to the user not found error
            print("screen_name that failed=",  screen_name)
            pro_trump.remove(screen_name)
            print(pro_trump)
        elif t.message[0]['code'] == 88: # The code for the rate limit error
            time.sleep(15*60) # Sleep for 15 minutes
    else:# if no error
        print(pro_trump)

这样,最后也不需要continues,因为它已经到达它正在执行的代码块的末尾,并且无论如何都会继续循环。

【讨论】:

  • 感谢您的深入解释。我有一些问题。我很困惑 api.friends_ids 是如何出现问题的,因为我每 15 分钟执行一次循环,避免了 twitter 的速率限制问题?您还可以解释一下 t 做什么以及 message 做什么?感谢您的帮助!
  • 嗯,我只是运行了您的更正,它没有删除不退出的屏幕名称。这是我的输出。 ['TruthSerum888','karlyherron','R41nB14ck','RedApplePol','MKhaoS_86'] ['TruthSerum888','karlyherron','R41nB14ck','RedApplePol','MKhaoS_86'] ['TruthSerum888','karlyherron' ,'R41nB14ck','RedApplePol','MKhaoS_86'] ['TruthSerum888','karlyherron','R41nB14ck','RedApplePol','MKhaoS_86'] ['TruthSerum888','karlyherron','R41nB14ck','RedApplePol' , 'MKhaoS_86']
  • 是的,因为所有这些 Twitter ID 都存在。我去每个用户的页面查看。
  • @Bob 不确定为什么该方法调用会引发速率限制错误,但我怀疑它类似于此处描述的问题:stackoverflow.com/questions/17431807/…t 只是tweepy.error.TweepError 的一个变量,因此我们可以看到抛出了哪个具体的错误,你可以通过t.message找到。
猜你喜欢
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多