python 3マルチスレッドを使用してInstaloaderを利用してinstagramからデータをダウンロード

2771 ワード

1.前回Instaloaderを利用してデータをダウンロードする例を作って、私はこの方面の教程が少ないことを発見して、単一のスレッドのダウンロード速度が遅いため、私のここはマルチスレッドを利用してダウンロードデータを加速して、workerの数に注意してあまり設定しないでください、さもなくばエラーを報告して、エラーの情報は:
JSON Query to explore/locations/245942146/: 429 Too Many Requests

2.知りたいならtxtの中身は、前のブログを参考にしてください.https://blog.csdn.net/w5688414/article/details/85061680
やはり同じ前提は1台の国外の仮想ホストを借りて、国内はダウンロードできなくて、以下はマルチスレッドのダウンロードで、ファイル名はdemoです.oy
from threading import Thread
from time import time, sleep
from queue import Queue
from datetime import datetime
import instaloader


    
# for HASHTAG in hashtags:
#     try:
#         posts = L.get_hashtag_posts(HASHTAG)
#         count=0
#         print(HASHTAG)
#         for post in posts:
#             if(post.is_video):
#                 continue
#             if(count==1000):
#                 break
#         #         print(post.date)
#             L.download_post(post, target='#'+HASHTAG)
#             count+=1
#     except Exception as e:
#         print(e)
L = instaloader.Instaloader()
def download_tweets(HASHTAG):
    try:
        posts = L.get_hashtag_posts(HASHTAG)
        count=0
        print(HASHTAG)
        for post in posts:
            if(post.is_video):
                continue
            if(count==1000):
                break
        #         print(post.date)
            L.download_post(post, target='#'+HASHTAG)
            count+=1
    except Exception as e:
        print(e)
        fp = open("error.txt", "a")
        fp.write(str(e)+"
") fp.close() class DownloadWorker(Thread): def __init__(self, queue,sleep=1): Thread.__init__(self) self.queue = queue self.numPicrures=0 self.sleep = sleep def run(self): while True: # Get the work from the queue and expand the tuple item = self.queue.get() if item is None: break # print(imageUrl) download_tweets(item) self.queue.task_done() sleep(self.sleep) if __name__ == "__main__": with open('hashtags.txt', encoding="utf-8") as f: examples=f.readlines() hashtags=[] for item in examples: hashtag=item.strip().replace('#','') hashtags.append(hashtag) ts = time() queue = Queue() for x in range(5): worker = DownloadWorker(queue,2) # Setting daemon to True will let the main thread exit even though the # workers are blocking worker.daemon = True worker.start() for hashtag in hashtags: queue.put(hashtag) queue.join() print('Took {}s'.format(time() - ts))