이번 포스트에서는 Python의 aiohttp 라이브러리를 사용하여 비동기적으로 웹 페이지를 크롤링하고, 그 결과를 데이터베이스에 저장하는 방법을 다루겠습니다.
aiohttp란?
aiohttp는 Python에서 비동기 웹 애플리케이션을 개발하기 위한 라이브러리입니다. 이 라이브러리를 사용하면 간단한 코드로 비동기적인 HTTP 요청을 처리할 수 있습니다.
설치하기
먼저, pip
명령어를 사용하여 aiohttp를 설치해야 합니다. 다음 명령어를 실행하세요:
pip install aiohttp
또한, 이 예제에서는 SQLite 데이터베이스를 사용할 것이므로, sqlite3
모듈도 설치해야 합니다.
pip install sqlite3
코드 예시
아래는 aiohttp를 사용하여 비동기적으로 웹 페이지를 크롤링하고, 그 결과를 SQLite 데이터베이스에 저장하는 예시 코드입니다.
import asyncio
from aiohttp import ClientSession
import sqlite3
async def fetch(url, session):
async with session.get(url) as response:
return await response.text()
async def crawl(url_list):
tasks = []
async with ClientSession() as session:
for url in url_list:
task = asyncio.ensure_future(fetch(url, session))
tasks.append(task)
responses = await asyncio.gather(*tasks)
save_to_database(responses)
def save_to_database(results):
conn = sqlite3.connect('web_crawler.db')
c = conn.cursor()
for response in results:
# 웹 페이지 크롤링 결과를 데이터베이스에 저장하는 로직
# 예시로 결과를 출력하도록 작성하였습니다.
print(response)
conn.commit()
conn.close()
if __name__ == '__main__':
urls = ['http://example.com', 'http://example.org', 'http://example.net']
loop = asyncio.get_event_loop()
loop.run_until_complete(crawl(urls))
위의 코드에서 fetch
함수는 주어진 URL의 비동기 GET 요청을 보내고, 그 결과를 반환합니다. crawl
함수는 url 리스트를 받아 각각의 URL에 대해 fetch
함수를 호출하고, asyncio.gather
함수를 사용하여 모든 비동기 요청이 완료될 때까지 대기합니다. 그리고 save_to_database
함수를 호출하여 크롤링 결과를 데이터베이스에 저장합니다.
실행하기
위의 코드를 복사하여 crawler.py
라는 파일에 저장하고, 아래 명령어를 실행하여 크롤러를 실행할 수 있습니다.
python crawler.py
결과는 SQLite 데이터베이스에 저장되는 대신, 콘솔에 출력됩니다. 이 예제 코드는 각 웹 페이지를 크롤링하여 그 결과를 출력하는 간단한 예시입니다. 실제로 데이터베이스에 결과를 저장하고 원하는 방식으로 활용하면 됩니다.
결론
이번 포스트에서는 aiohttp를 사용하여 비동기적으로 웹 페이지를 크롤링하고, 그 결과를 데이터베이스에 저장하는 방법을 살펴보았습니다. aiohttp는 비동기 웹 애플리케이션 개발을 간편하게 만들어주는 강력한 도구입니다. 웹 크롤러나 다른 비동기적인 작업을 수행하는 애플리케이션을 개발할 때 aiohttp를 적극 활용해보세요!