Post

httpx를 이용하여 비동기로 웹사이트 정보를 획득해보자

비동기로 웹사이트 데이터를 획득해보자

httpx를 이용하여 비동기로 웹사이트 정보를 획득해보자

httpx를 이용하여 비동기로 웹사이트 정보를 획득해보자

비동기로 웹사이트 데이터를 획득해보자

1. 서론 (Introduction)

  • 문제/상황 (Problem):
    • 다수의 웹사이트 정보를 수집할 때 동기 방식의 요청은 I/O 대기 시간으로 인해 전체 처리 속도가 현저히 느려지는 한계가 있다.
  • 목적 (Purpose):
    • httpx 라이브러리의 비동기 기능을 활용하여 효율적이고 빠른 웹 데이터 수집 클라이언트를 구축한다.
  • 대상 (Target Audience):
    • 대량의 웹 데이터를 빠르게 처리해야 하거나 최신 Python 비동기 프로그래밍(asyncio)을 도입하려는 개발자

2. 방법 및 과정 (Methods & Process)

  • 배경 조사 및 데이터 (Data Collection):
    • requests와 유사한 API를 제공하면서도 완전한 비동기 지원과 HTTP/2를 지원하는 httpx의 특성을 조사하였다.
기능설명장점
AsyncClientasyncio 기반의 비동기 HTTP 클라이언트논블로킹 I/O를 통한 동시 요청 처리 극대화
Context Managerasync with를 통한 자원 관리세션 종료 및 리소스 해제의 자동화 및 안정성
HTTP/2 지원최신 HTTP 프로토콜 대응단일 연결을 통한 다중 요청으로 효율성 증대
병렬 처리asyncio.gather 등을 활용한 동시성 제어수천 개의 URL을 짧은 시간 내에 처리 가능
유연한 타임아웃세밀한 타임아웃 설정 기능네트워크 환경에 따른 정밀한 예외 제어
  • 접근 방법 (Approach Methods):
    • [방법 1]: httpx.AsyncClient를 초기화하여 비동기 환경에서의 연결 풀을 구성한다.
    • [방법 2]: async/await 구문을 사용하여 요청을 비동기적으로 처리하고 결과를 파싱한다.
  • 분석 및 해결 프로세스 (Analysis Flow):
    • 도구/기술: Python, httpx, asyncio, beautifulsoup4
    • 주요 단계: 종속성 체크 모듈 연동 $\rightarrow$ Async WebClient 클래스 설계 $\rightarrow$ 비동기 로그인 및 추출 메서드 구현 $\rightarrow$ 리소스 해제를 위한 close 처리 $\rightarrow$ asyncio.run을 통한 최종 검증
    • 결과 도출 및 검증: 동기 방식 대비 압도적인 대기 시간 감소를 확인하며, 로컬 데모 서버와의 비동기 통신 성공을 검증한다.

3. 결과 (Results)

  • 분석 결과 요약:
    • httpx는 requests의 사용성을 유지하면서도 강력한 비동기 성능을 제공함을 확인하였다.
    • 비동기 클라이언트를 통해 다수의 네트워크 요청을 병렬로 처리함으로써 전체 수집 프로세스의 처리량을 크게 향상시켰다.

4. 인사이트 및 액션 (Insights & Action)

  • 인사이트 (Insight):
    • 비동기로 웹사이트 정보를 가져와보았다. 크롤링에 주로 사용하는 playwright를 활용해보자.
    • I/O 바운드 작업인 웹 스크래핑에서 비동기 프로그래밍은 선택이 아닌 필수적인 최적화 기법이다.
  • 실행 방안 (Action Plan):
    • 고성능이 요구되는 데이터 수집 파이프라인의 기본 엔진을 httpx 비동기 클라이언트로 전환한다.
  • 한 줄 결론 (Key Takeaway):
    • httpx와 asyncio를 결합하면 성능과 생산성을 모두 잡은 비동기 크롤러를 구축할 수 있다. 샘플 코드
  • 다음 스텝 (Next Step):
    • 자바스크립트 렌더링이 필요한 동적 웹사이트 대응을 위해 playwright 기반의 크롤링 기법을 연구한다.
This post is licensed under CC BY 4.0 by the author.