Оптимизация долгого обновления в парсере

Как быстро (за 1-2 секунды) получать и обновлять информацию с нескольких сайтов используя парсинг в связке Python - requests - BeautifulSoup?

Собираю данные о курсе валют с 50 сайтов, необходимо реализовать быстрое обновление данных. Использую библиотеки requests и BeautifulSoup:

def val1(coll):
    for url in mass_url[coll]: # Перебираем многомерный массив с ссылками
        v_curr = BeautifulSoup(requests.get(url).text, "html.parser").find\
            ('div', class_ = str_class).text
        print(v_curr, url)

Столкнулся с проблемой долгого обновления, создал несколько раздельных процессов (multiprocessing), результат — обновление около 6-8 секунд:

if _name_ == '_main_':
    p1 = Process(target=val1, args=(0, ), daemon=True)
    p2 = Process(target=val1, args=(1, ), daemon=True)
    p3 = Process(target=val1, args=(2, ), daemon=True)
    p4 = Process(target=val1, args=(3, ), daemon=True)
    p5 = Process(target=val1, args=(4, ), daemon=True)
    p1.start()
    p2.start()
    p3.start()
    p4.start()
    p5.start()
    p1.join()
    p2.join()
    p3.join()
    p4.join()
    p5.join()

Попытался использовать асинхронность — обновление около 30 секунд:

async def val2(coll):
    for url in mass_url[coll]: # Перебираем многомерный массив с ссылками
        v_curr = BeautifulSoup(requests.get(url).text, "html.parser").find\
            ('div', class_ = str_class).text
    await asyncio.sleep(0.5)
    print(v_curr)

async def main():
    task1 = asyncio.create_task(val1(0))
    task2 = asyncio.create_task(val1(1))
    task3 = asyncio.create_task(val1(2))
    task4 = asyncio.create_task(val1(3))
    task5 = asyncio.create_task(val1(4))
    await task1
    await task2
    await task3
    await task4
    await task5
asyncio.run(main())

Мог ли я совершить ошибку в использования этих методов и каким способом мне можно ускорить/оптимизировать работу программы?


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