[python] aiohttp를 사용하여 비동기적으로 웹 크롤러 키워드 분석 결과 시각화하기
이번 튜토리얼에서는 파이썬의 aiohttp 라이브러리를 사용하여 비동기적으로 웹 크롤링을 수행하고, 얻은 데이터를 키워드 분석을 통해 시각화하는 방법을 알아보겠습니다.
aiohttp란?
aiohttp는 Python 3.5 이상에서 비동기 웹 요청을 처리하기 위한 라이브러리입니다. 이 라이브러리를 사용하면 비동기적으로 여러 웹 페이지에서 데이터를 가져올 수 있어 웹 크롤링 작업에 매우 유용합니다.
필요한 라이브러리 설치하기
먼저 필요한 라이브러리인 aiohttp와 키워드 분석을 위한 nltk 라이브러리를 설치합니다.
pip install aiohttp nltk
웹 크롤링 코드 작성하기
아래는 aiohttp를 사용하여 비동기적으로 웹 크롤링을 수행하는 예제 코드입니다.
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
tasks = []
for url in urls:
task = asyncio.ensure_future(fetch(session, url))
tasks.append(task)
responses = await asyncio.gather(*tasks)
# 각 응답에 대해 키워드 분석 작업 수행
keywords = analyze_keywords(responses)
# 결과 시각화
visualize_results(keywords)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
키워드 분석 및 시각화
이제 키워드 분석 및 시각화를 위한 함수를 작성해보겠습니다.
import nltk
from nltk.corpus import stopwords
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 키워드 추출
def analyze_keywords(responses):
keywords = []
for response in responses:
# response에서 텍스트 추출
text = extract_text(response)
# 토큰화
tokens = nltk.word_tokenize(text.lower())
# 불용어 제거
tokens = [token for token in tokens if token not in stopwords.words('english')]
# 키워드 추가
keywords.extend(tokens)
return keywords
# 키워드 시각화
def visualize_results(keywords):
wordcloud = WordCloud(width=800, height=400).generate(' '.join(keywords))
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
실행하기
위의 코드를 실행하면 비동기적으로 웹 크롤링이 수행되고, 얻은 데이터를 토큰화하여 키워드를 추출한 후 WordCloud를 사용하여 시각화합니다.
이제 코드를 작성하고 실행해보세요!