[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
를 사용하여 비동기적으로 웹 크롤러 결과를 엑셀 파일로 보내는 방법을 알아보았습니다. 비동기 처리를 통해 웹 크롤링 작업을 빠르고 효율적으로 수행할 수 있습니다.