Многопроцессорная обработка в python с использованием ботов instgram для получения имен пользователей последователей - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть около 100 влияющих, чтобы получить там имена пользователей последователей, там число подписчиков может варьироваться от 100 до 10 миллионов. Поэтому я хочу, чтобы код запускал все 100 влияющих одновременно, используя разные учетные записи и прокси-серверы (я знаю, что каждый IP-адрес может использовать одну и ту же учетную запись 5 раз в сеансе за один раз в instgram, верно?), Поэтому я могу использовать 20 разных аккаунтов с 20 разными IP). Весь этот процесс будет выполняться на том же сервере, поэтому я могу использовать многопоточность в python. Это будет работать ? или есть какие-то ограничения или другие способы сделать это?

Я использую instagram-scraper https://github.com/realsirjoe/instagram-scraper

Обновление: я пытался реализовать код, вот что я got: Код генерирует python скрипт для каждого влияющего и выполняет их одновременно

import subprocess 
import time
import os
import multiprocessing 
tasks=[]
followers_num = 100
with open('Influncers_data.csv')as f:
  influncer_data = f.read().splitlines()
with open('profile.csv')as f:
  profile = f.read().splitlines()
with open('proxy.csv')as f:
  proxies = f.read().splitlines()
# for each item in the list of items
for x,y,z in zip(proxies,influncer_data,profile):
            # construct the filename; prefix or suffix optional
            file = 'get-followers-' + y + '.py'

            # open the file to be written
            fo = open(file, 'w')
            # write the content in the file including the value being passed to each; %s indicates a string
            #fo.write('%s' % value)
            fo.write("from context import Instagram\n")
            fo.write("from time import sleep\n")
            fo.write("import csv\n")
            fo.write('print("')
            fo.write(y)
            fo.write(' process is running")\n')
            fo.write("instagram = Instagram()\n")
            fo.write("instagram.set_proxies('")
            fo.write('%s' %x)
            fo.write("')\n")
            fo.write("instagram.with_credentials('")
            fo.write('%s' % z)
            fo.write("', '4861530123')\n")
            fo.write("instagram.login(force=False,two_step_verificator=True)\n")
            fo.write("sleep(2) # Delay to mimic user\n")
            fo.write("username = '")
            fo.write('%s' % y)
            fo.write("'\n")
            fo.write("followers = []\n")
            fo.write("account = instagram.get_account(username)\n")
            fo.write("sleep(1)\n")
            fo.write("followers = instagram.get_followers(account.identifier, ")
            fo.write('%s' % followers_num)
            fo.write(", 100, delayed=True) # Get 150 followers of 'kevin', 100 a time with random delay between requests\n")
            fo.write("with open('")
            fo.write('%s' % y)
            fo.write(".csv', 'w', encoding='utf8') as f:\n")
            fo.write(" f.write('Number'+','+'ID' +','+'Username'+','+'Profile picture URL'+','+'Number of published posts'+','+'Number of followers'+','+'Number of following'+','+'Is private'+','+'Is verified'+'\\n')\n ")
            fo.write("for num,follower in enumerate(followers['accounts']):\n")
            fo.write("  #print(follower)\n")
            fo.write("  account = instagram.get_account(follower.username)\n")
            fo.write("  sleep(10)\n")
            fo.write("  f.write(str(num+1) +','+str(account.identifier)+','+follower.username+','+str(account.get_profile_picture_url())+','+str(account.media_count)+','+str(account.followed_by_count)+','+str(account.follows_count)+','+str(account.is_private) +','+str(account.is_verified)+'\\n')\n ")
            fo.write('print("')
            fo.write(y)
            fo.write(' is completed")')
            #close the file
            fo.close()
for q in influncer_data:
    tasks.append('get-followers-' + q + '.py')
# print(tasks)            
def foo(task):
    os.system('python3 ' + task)
if __name__ == '__main__':
    for task in tasks:
     p = multiprocessing.Process(target=foo, args=(task,))
     p.start()
     time.sleep(45)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...