[python] aiohttp를 사용하여 비동기적으로 웹 크롤러 결과를 엑셀 파일로 보내기

이번 포스트에서는 aiohttp를 사용하여 비동기적으로 웹 크롤러 결과를 엑셀 파일로 보내는 방법을 알아보겠습니다.

aiohttp란?

aiohttp는 파이썬에서 비동기 HTTP 클라이언트 및 서버를 작성하기 위한 라이브러리입니다. 비동기 방식으로 요청을 보내기 때문에 여러 요청을 동시에 처리할 수 있습니다. 이를 통해 웹 크롤링 작업을 효율적으로 처리할 수 있습니다.

준비 사항

다음과 같은 패키지를 설치해야 합니다.

pip install aiohttp openpyxl

코드 작성

import asyncio
import aiohttp
import openpyxl


async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()


async def main():
    urls = [
        "http://example.com/page1",
        "http://example.com/page2",
        "http://example.com/page3"
    ]

    async with aiohttp.ClientSession() as session:
        tasks = []

        for url in urls:
            task = asyncio.create_task(fetch(session, url))
            tasks.append(task)

        results = await asyncio.gather(*tasks)
        
        # 엑셀 파일 생성 및 결과 저장
        wb = openpyxl.Workbook()
        ws = wb.active

        for idx, result in enumerate(results):
            ws.cell(row=idx+1, column=1, value=result)

        wb.save("results.xlsx")


if __name__ == "__main__":
    asyncio.run(main())

위 코드는 fetch 함수를 사용하여 비동기적으로 HTTP 요청을 보내고, main 함수에서 fetch 함수를 호출하는 형태로 구성되어 있습니다. 이때, 요청할 URL 리스트를 urls에 저장하고, asyncio.gather를 사용하여 여러 요청을 동시에 처리합니다. 최종 결과를 엑셀 파일에 저장하기 위해 openpyxl을 사용했습니다.

실행 및 결과 확인

위 코드를 실행하면, 각 URL에 대한 HTTP 응답 결과가 엑셀 파일에 저장됩니다. 결과 파일은 현재 스크립트가 실행되는 디렉토리에 “results.xlsx”라는 이름으로 저장됩니다.

결론

이번 포스트에서는 aiohttp를 사용하여 비동기적으로 웹 크롤러 결과를 엑셀 파일로 보내는 방법을 알아보았습니다. 비동기 처리를 통해 웹 크롤링 작업을 빠르고 효율적으로 수행할 수 있습니다.