[python] aiohttp를 사용하여 비동기적으로 웹 크롤러 결과를 Slack으로 알림 보내기
이번에는 Python의 aiohttp
라이브러리를 사용하여 비동기적으로 웹 크롤러 결과를 Slack으로 알림을 보내는 방법에 대해 알아보겠습니다.
Slack으로 알림 보내기 위한 준비하기
- Slack 워크스페이스에 로그인합니다.
- 원하는 채널에 들어가서 Apps 메뉴로 이동합니다.
- Browse App Directory를 클릭하여 앱 검색 페이지로 이동합니다.
- 검색 창에 “Incoming Webhooks”를 입력하고 해당 앱을 설치합니다.
- 앱을 설치하는 동안 토큰을 생성합니다. 이 토큰은 웹 크롤러가 Slack으로 알림을 보내는 데 사용됩니다.
비동기 웹 크롤러 작성하기
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def crawl(url):
async with aiohttp.ClientSession() as session:
html = await fetch(session, url)
# 크롤링 결과 처리하기
loop = asyncio.get_event_loop()
loop.run_until_complete(crawl("https://example.com"))
위의 코드에서 fetch
함수는 aiohttp
를 사용하여 비동기적으로 웹 페이지를 가져오는 역할을 합니다. crawl
함수에서는 크롤링할 URL을 입력받고 fetch
함수를 호출하여 페이지를 가져온 후 결과를 처리하는 로직을 작성합니다.
Slack으로 알림 보내기
import aiohttp
import asyncio
async def send_message(webhook_url, message):
async with aiohttp.ClientSession() as session:
async with session.post(webhook_url, json={'text': message}) as _:
pass
async def crawl(url, webhook_url):
async with aiohttp.ClientSession() as session:
html = await fetch(session, url)
# 크롤링 결과 처리하기
# Slack 알림 보내기
message = "웹 크롤링 결과: ..."
await send_message(webhook_url, message)
loop = asyncio.get_event_loop()
loop.run_until_complete(crawl("https://example.com", "SLACK_WEBHOOK_URL"))
send_message
함수는 aiohttp
를 사용하여 Slack로 메시지를 전송하는 역할을 합니다. crawl
함수에서 크롤링 결과를 처리한 후, Slack으로 알림을 보내기 위해 send_message
함수를 호출합니다. webhook_url
파라미터는 사전에 생성한 Slack Incoming Webhooks의 토큰을 전달해야 합니다.
이제 웹 크롤러 결과를 Slack으로 알림 보내는 코드를 작성하는 방법을 알게 되었습니다. aiohttp
를 사용하면 비동기적으로 여러 웹 요청을 처리할 수 있으므로 크롤링 작업의 효율성을 높일 수 있습니다.