2016-10-06 4 views
1

Я пытаюсь получить все результаты поиска в списке.tweepy.Cursor возвращает тех же пользователей снова и снова

Вот код:

cursor = tweepy.Cursor(api.search_users,"foo") 
count = 0 
for u in cursor.items(30): 
    count += 1 
    print count, u.id_str 
print count 

Увы, пункт 1 так же, как 21, 2 так же, как 22 & с:

1 19081001 
2 313527365 
3 89528870 
4 682463 
5 2607583036 
6 219840627 
7 725883651280363520 
8 371980318 
9 860066587 
10 4794574949 
11 88633646 
12 137482245 
13 1447284511 
14 15369494 
15 171657474 
16 442113112 
17 6130932 
18 2587755194 
19 191338693 
20 528804165 
21 19081001 
22 313527365 
23 89528870 
24 682463 
25 2607583036 
26 219840627 
27 725883651280363520 
28 371980318 
29 860066587 
30 4794574949 
30 

Как получить все в результаты поиска?

по запросу:

dir(cursor) 
['__class__', 
'__delattr__', 
'__dict__', 
'__doc__', 
'__format__', 
'__getattribute__', 
'__hash__', 
'__init__', 
'__module__', 
'__new__', 
'__reduce__', 
'__reduce_ex__', 
'__repr__', 
'__setattr__', 
'__sizeof__', 
'__str__', 
'__subclasshook__', 
'__weakref__', 
'items', 
'iterator', 
'pages'] 
+0

Попробуйте 'dir (cursor)', чтобы увидеть, что вы можете с ним сделать. Если вы не найдете ничего удивительного, это должно быть pythonic решение. –

+0

Я добавил это к тексту вопроса, но я не вижу, как это может иметь отношение к выходу _repeated_. – sds

+0

Что вы пытаетесь достичь? не могли бы вы добавить требование ясно в вопросе! – kmario23

ответ

1

Согласно tweepy documentation, вы не должны пройти несколько больше 20. Вы пропускание 30, поэтому вы получите повторены идентификаторы после 20 записей идентификаторов.

Я немного взломал и придумал приведенный ниже код, который получит всех пользователей, которые соответствуют поисковому запросу (здесь foo).

def get_users(): 
    try: 
     count = 0 
     all_users = [] 
     for page in tweepy.Cursor(api.search_users,"foo").pages(): 
      #page[0] has the UserObj 
      id_str = page[0].id_str 
      scr_name = page[0].screen_name 
      print(count, id_str, scr_name) 
      count += 1 
      all_users.append((id_str, scr_name)) 

    except tweepy.error.TweepError as twerr: 
     print(" sleep because of error.. ") 
     time.sleep(10) 

Конечно, это очень грубая реализация. Пожалуйста, напишите правильную функцию спящего режима, чтобы не превышать лимит скорости твиттера.

+0

Я все еще получаю '(0, u'19081001 ', u'foofighters')' дважды печатается. – sds

+0

@sds Да, я даже заметил это. Но это странная ошибка, которую я не мог понять, почему. Кроме того, печатаются еще не дублированные записи. Я проверил его с несколькими ключевыми словами. – kmario23

Смежные вопросы