Нарежьте список, подождите и идите дальше - PullRequest
0 голосов
/ 13 декабря 2018

Я столкнулся с проблемой использования Python для получения информации о подписчиках благодаря Twitter API.Как вы знаете, API сокращается по истечении определенного времени ожидания или ограничения скорости.Моя идея состояла в том, чтобы сократить список подписчиков, которых я должен сканировать, например, 200 псевдонимов, подождать, а затем продолжить.Для этого я использую islice:

while True:
lines =[x.rstrip('\n') for x in islice(followers, 200)]
for i in lines:
    try:
    # Request general user information
        resp = twitter.show_user(screen_name=i)
        print('Retrieving information for'+ ' '+str(i))
        spinner1.start()# Append fields to list
        user_info.append([resp['id'],
                resp['screen_name'],
                resp['name'],
                resp['lang'],
                resp['location'],
                resp['created_at'],
                resp['description'],
                resp['followers_count'],
                resp['friends_count'],
                resp['statuses_count'],
                resp['favourites_count'],
                resp['listed_count']])
        spinner1.stop()
        time.sleep(1)
    except:
        print('>>>>>' + 'This User: ' + str(x) + ' Is not accessible' + '<<<<<')
    time.sleep(6301)
if not lines:
    break

Проблема в том, что цикл начинается снова с начала списка.Мне не удалось понять Python, чтобы начать с того момента, когда он остановился.Есть идеи?Большое спасибо !!!

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете использовать ключевое слово yield для обработки вашего списка:

def process_followers():
    for i in range(0, len(followers), 200):
        lines = followers[i:i + 200]
        for i in lines:
            try:
                # Request general user information
                resp = twitter.show_user(screen_name=i)
                print('Retrieving information for' + ' ' + str(i))
                spinner1.start()  # Append fields to list
                user_info.append([resp['id'],
                                  resp['screen_name'],
                                  resp['name'],
                                  resp['lang'],
                                  resp['location'],
                                  resp['created_at'],
                                  resp['description'],
                                  resp['followers_count'],
                                  resp['friends_count'],
                                  resp['statuses_count'],
                                  resp['favourites_count'],
                                  resp['listed_count']])
                spinner1.stop()
                time.sleep(1)
                except:
                    print('>>>>>' + 'This User: ' + str(x) + ' Is not accessible' + '<<<<<')
        yield

Затем вы можете использовать его следующим образом:

processor = process_followers()
try:
    while True:
        processor.__next__()
        time.sleep(6301)
except StopIteration:
    pass
0 голосов
/ 13 декабря 2018

Нет необходимости в функции islice(), вы можете напрямую нарезать список подписчиков и с помощью простого счетчика отслеживать, где вы находитесь в списке;

cnt = 0
while True:
  lines =[x.rstrip('\n') for x in followers[cnt:cnt+200])]
  for i in lines:
    try:
    # Request general user information
        resp = twitter.show_user(screen_name=i)
        print('Retrieving information for'+ ' '+str(i))
        spinner1.start()# Append fields to list
        user_info.append([resp['id'],
                resp['screen_name'],
                resp['name'],
                resp['lang'],
                resp['location'],
                resp['created_at'],
                resp['description'],
                resp['followers_count'],
                resp['friends_count'],
                resp['statuses_count'],
                resp['favourites_count'],
                resp['listed_count']])
        spinner1.stop()
        time.sleep(1)
    except:
        print('>>>>>' + 'This User: ' + str(x) + ' Is not accessible' + '<<<<<')
    time.sleep(6301)
  cnt += 200
if not lines:
    break

После каждого цикла вы простодобавьте 200 к счетчику, и он нарежет список с того места, где вы в последний раз закончили нарезку.

...