[python] aiohttp를 사용하여 크롤링한 데이터를 데이터베이스에 저장하기

소개

크롤링은 웹사이트에서 데이터를 수집하는 프로세스입니다. 이번에는 aiohttp 라이브러리를 사용하여 비동기 크롤링을 수행하고, 수집한 데이터를 데이터베이스에 저장하는 방법에 대해 알아보겠습니다.

aiohttp 설치

먼저, aiohttp를 설치해야 합니다. 아래 명령어를 사용하여 설치할 수 있습니다.

pip install aiohttp

데이터 크롤링 및 저장 코드 작성하기

이제 데이터를 크롤링하고, 데이터베이스에 저장하는 코드를 작성해보겠습니다.

import asyncio
import aiohttp
import asyncpg

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

async def save_to_database(data):
    conn = await asyncpg.connect(user='your_user', password='your_password', host='your_host', database='your_database')
    await conn.execute("INSERT INTO your_table_name (data) VALUES ($1)", data)
    await conn.close()

async def main():
    urls = ['https://www.example.com/page1', 'https://www.example.com/page2', 'https://www.example.com/page3']
    tasks = []

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

    responses = await asyncio.gather(*tasks)
    for response in responses:
        await save_to_database(response)

asyncio.run(main())

위 코드에서는 fetch 함수를 사용하여 비동기적으로 각 URL에서 데이터를 가져옵니다. 그리고 save_to_database 함수를 사용하여 데이터베이스에 데이터를 저장합니다. 크롤링할 URL은 urls 리스트에 저장되어 있으며, 필요에 따라 수정할 수 있습니다. 데이터베이스 연결 정보는 asyncpg.connect 함수의 인자로 전달해주어야 합니다.

실행하기

위 코드를 실행하려면 다음과 같은 사전 작업을 수행해야 합니다.

  1. 데이터베이스에 접속할 수 있는 사용자와 암호를 생성해야 합니다.
  2. 데이터베이스에 접속할 수 있는 호스트와 포트 정보가 있어야 합니다.
  3. 데이터베이스에 저장할 테이블을 생성해야 합니다.

위 사전 작업을 완료한 후, 예시 코드를 실행하면 데이터가 크롤링되어 데이터베이스에 저장됩니다.

결론

이번에는 aiohttp를 사용하여 크롤링한 데이터를 데이터베이스에 저장하는 방법에 대해 알아보았습니다. aiohttp를 활용하면 비동기적으로 크롤링을 수행할 수 있으므로, 대량의 데이터를 효율적으로 처리할 수 있습니다. 크롤링한 데이터를 데이터베이스에 저장하는 것은 데이터 분석 및 웹 서비스 개발 등 다양한 분야에서 유용하게 활용될 수 있습니다.

참고 자료