python 3マルチスレッドを使用してInstaloaderを利用してinstagramからデータをダウンロード
2771 ワード
1.前回Instaloaderを利用してデータをダウンロードする例を作って、私はこの方面の教程が少ないことを発見して、単一のスレッドのダウンロード速度が遅いため、私のここはマルチスレッドを利用してダウンロードデータを加速して、workerの数に注意してあまり設定しないでください、さもなくばエラーを報告して、エラーの情報は:
2.知りたいならtxtの中身は、前のブログを参考にしてください.https://blog.csdn.net/w5688414/article/details/85061680
やはり同じ前提は1台の国外の仮想ホストを借りて、国内はダウンロードできなくて、以下はマルチスレッドのダウンロードで、ファイル名はdemoです.oy
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))