Получите все идентификаторы следящего устройства в Twitter от Tweepy
Можно ли получить полный список следящих за аккаунтом, у которого более миллиона подписчиков, например, McDonald's?
Я использую Tweepy и следую коду:
c = tweepy.Cursor(api.followers_ids, id = 'McDonalds')
ids = []
for page in c.pages():
ids.append(page)
Я также пробую:
for id in c.items():
ids.append(id)
Но у меня всегда была ошибка "Превышена предел скорости", и было всего 5000 идентификаторов последователей.
Ответы
Ответ 1
Чтобы избежать ограничения скорости, вы можете/должны подождать до следующего запроса страницы подписчика. Выглядит хаки, но работает:
import time
import tweepy
auth = tweepy.OAuthHandler(..., ...)
auth.set_access_token(..., ...)
api = tweepy.API(auth)
ids = []
for page in tweepy.Cursor(api.followers_ids, screen_name="McDonalds").pages():
ids.extend(page)
time.sleep(60)
print len(ids)
Надеюсь, что это поможет.
Ответ 2
Используйте аргументы ограничения скорости при подключении. Апи будет самоконтролироваться в пределах лимита скорости.
Пауза сна не плохая, я использую ее для моделирования человека и распространения активности в течение периода времени с ограничением скорости api в качестве конечного элемента управления.
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True, compression=True)
также добавить try/except для захвата и управления ошибками.
пример кода
https://github.com/aspiringguru/twitterDataAnalyse/blob/master/sample_rate_limit_w_cursor.py
Я поместил свои ключи во внешний файл, чтобы упростить управление.
https://github.com/aspiringguru/twitterDataAnalyse/blob/master/keys.py
Ответ 3
Ответ от alecxe хорош, однако никто не сослался на документы. Правильная информация и объяснения для ответа на вопрос содержатся в документации по API Twitter. Из документации:
Результаты представлены в группах по 5000 идентификаторов пользователей, и по нескольким "страницам" результатов можно перемещаться, используя значение next_cursor в последующих запросах.
Ответ 4
Я использую этот код, и он работает для большого числа подписчиков:
Есть две функции: одна для сохранения идентификатора подписчиков после каждого периода ожидания и другая для получения списка:
это немного миссис, но я надеюсь быть полезным.
def save_followers_status(filename,foloowersid):
path='//content//drive//My Drive//Colab Notebooks//twitter//'+filename
if not (os.path.isfile(path+'_followers_status.csv')):
with open(path+'_followers_status.csv', 'wb') as csvfile:
filewriter = csv.writer(csvfile, delimiter=',')
if len(foloowersid)>0:
print("save followers status of ", filename)
file = path + '_followers_status.csv'
# https: // stackoverflow.com / questions / 3348460 / csv - file - written -with-python - has - blank - lines - between - each - row
with open(file, mode='a', newline='') as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for row in foloowersid:
writer.writerow(np.array(row))
csv_file.closed
def get_followers_id(person):
foloowersid = []
count=0
influencer=api.get_user( screen_name=person)
influencer_id=influencer.id
number_of_followers=influencer.followers_count
print("number of followers count : ",number_of_followers,'\n','user id : ',influencer_id)
status = tweepy.Cursor(api.followers_ids, screen_name=person, tweet_mode="extended").items()
for i in range(0,number_of_followers):
try:
user=next(status)
foloowersid.append([user])
count += 1
except tweepy.TweepError:
print('error limite of twiter sleep for 15 min')
timestamp = time.strftime("%d.%m.%Y %H:%M:%S", time.localtime())
print(timestamp)
if len(foloowersid)>0 :
print('the number get until this time :', count,'all folloers count is : ',number_of_followers)
foloowersid = np.array(str(foloowersid))
save_followers_status(person, foloowersid)
foloowersid = []
time.sleep(15*60)
next(status)
except :
print('end of foloowers ', count, 'all followers count is : ', number_of_followers)
foloowersid = np.array(str(foloowersid))
save_followers_status(person, foloowersid)
foloowersid = []
save_followers_status(person, foloowersid)
# foloowersid = np.array(map(str,foloowersid))
return foloowersid