[python] aiohttp를 사용하여 비동기적으로 웹 크롤러 결과를 CSV 파일로 저장하기

이 글에서는 비동기 웹 크롤러를 구현하기 위해 aiohttp 라이브러리를 사용하는 방법을 알아보겠습니다. 또한, 크롤링한 결과를 CSV 파일로 저장하는 방법도 소개하겠습니다.

aiohttp 라이브러리 설치하기

먼저, aiohttp 라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 설치하세요.

pip install aiohttp

비동기 웹 크롤러 구현하기

이제, 비동기 웹 크롤러를 구현해보겠습니다. aiohttp를 사용하여 비동기적으로 HTTP 요청을 보내고 응답을 받을 수 있습니다.

import aiohttp
import asyncio

async def fetch_html(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    url = 'https://example.com'
    html = await fetch_html(url)
    print(html)

# 이벤트 루프 생성 및 실행
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

위 코드에서 fetch_html 함수는 aiohttp를 사용하여 비동기적으로 HTML을 가져오는 역할을 합니다. main 함수에서는 지정된 URL의 HTML을 가져와서 출력합니다.

크롤링 결과를 CSV 파일로 저장하기

이제, 크롤링한 결과를 CSV 파일로 저장해보겠습니다. csv 모듈을 사용하여 간단하게 CSV 파일을 생성하고 데이터를 저장할 수 있습니다.

import aiohttp
import asyncio
import csv

async def fetch_html(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    url = 'https://example.com'
    html = await fetch_html(url)
    
    # CSV 파일 생성 및 데이터 저장
    with open('result.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(['URL', 'HTML'])
        writer.writerow([url, html])

# 이벤트 루프 생성 및 실행
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

위 코드에서 csv.writer를 사용하여 CSV 파일을 생성하고, writer.writerow를 사용하여 데이터를 저장합니다. 이 예제에서는 크롤링한 HTML을 저장하였습니다. 필요에 맞게 데이터를 저장하고 추가하면 됩니다.

이제, result.csv 파일에는 크롤링한 결과가 저장되어 있습니다.

결론

이번 글에서는 aiohttp 라이브러리를 사용하여 비동기 웹 크롤러를 구현하는 방법을 알아보았습니다. 또한, 크롤링한 결과를 CSV 파일로 저장하는 방법도 소개하였습니다.

aiohttp는 비동기적인 웹 요청을 처리하기에 효율적인 라이브러리이며, csv 모듈을 사용하여 결과를 CSV 파일로 저장할 수 있습니다. 크롤링 작업을 효율적으로 처리하고 결과를 저장하는 데에 활용해보세요.