Оптимизация долгого обновления в парсере
Как быстро (за 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())
Мог ли я совершить ошибку в использования этих методов и каким способом мне можно ускорить/оптимизировать работу программы?