Как ускорить парсер Аватарок?

Я практиковался в мнопоточности и решил сделать парсер аватарок. Но скорость сбора данных оставляет желать лучшего. Что я делаю не так? Или может это всё под asyncio переделать?

import threading
import requests
from bs4 import BeautifulSoup
import lxml

def getImage():
        #https://cspromogame.ru/avatars?page=1999
        links = set()
        for page in range(1,101): #2000
            url = "https://cspromogame.ru/avatars?page={page}"
            req = requests.get(url=url)
            soup = BeautifulSoup(req.text,"lxml")
            a = soup.findAll("a", class_="avatars__link")
            for link in a:
                link = link.get("href")
                alinks = link.split("/")[-1].replace(".jpg","")
                req2 = requests.get(link)
                out = open(f"Avatars/Картинка_{alinks}.jpg",'wb')
                out.write(req2.content)
                out.close()
                print("Обработано ", alinks)
                
threads  = []
for i in range(11):
    t = threading.Thread(target=getImage)
    t.start()

for th in threads:
    th.join()

Ответы (1 шт):

Автор решения: Виктор

Вариант реализации (для ознакомления)

from bs4 import BeautifulSoup
import lxml
import asyncio
import aiohttp
import time

start_time = time.time()

async def main():

    async def get_one_page(page:int):
        url = f'https://cspromogame.ru/avatars?page={page}'
              
        async with session.get(url) as resp:
            text = await resp.text()
            print(f'Page: {page}')

            soup = BeautifulSoup(text,"lxml")
            a = soup.findAll("a", class_="avatars__link")
            for link in a:
                link = link.get("href")
                alinks = link.split("/")[-1].replace(".jpg","")

                async with session.get(link) as resp:
                    filename = f'Avatars/Pic_{alinks}.jpg'
                    chunk_size = 64 * 1024
                    with open(filename, 'wb') as fd:
                        async for chunk in resp.content.iter_chunked(chunk_size):
                            fd.write(chunk)
                    print(f'Done: {filename}')

    async with aiohttp.ClientSession() as session:
        pages = [ get_one_page(page) for page in range(1, 3)]
        await asyncio.gather(*pages)

asyncio.run(main())

print("--- %s seconds ---" % (time.time() - start_time))
→ Ссылка