pile·
백엔드·너드팩토리너드팩토리·

Django REST Framework로 API 만들기 & HTML 요소 수집하기

Django 설치부터 REST Framework로 API를 만들고, Selenium과 lxml로 웹페이지의 요소별 위치 정보를 수집해 같은 API로 내보내기까지 한 번에 훑는 튜토리얼이다. 프로젝트 생성과 모델·시리얼라이저·뷰·URL 매핑을 순서대로 짚은 뒤 수집 스크립트를 Django와 연동한다. 각 단계마다 실행 명령과 코드가 붙는다.

핵심 포인트
  • Django는 MVC 계열 구조를 따르며 데이터베이스 기반 사이트를 빠르게 만드는 것을 목표로 한다.
  • django-admin의 startproject로 프로젝트를 만들면 설정과 URL, 실행 스크립트가 함께 생성된다.
  • 모델을 만들고 시리얼라이저로 직렬화한 뒤 뷰에서 Response로 반환하는 것이 REST Framework의 기본 흐름이다.
  • 뷰를 만들었으면 프로젝트의 urlpatterns에 경로를 매핑해야 접근할 수 있다.
  • 값 입력은 admin 페이지로 빠르게 할 수도 있고 뷰의 쿼리셋으로 처리할 수도 있다.
  • 수집 스크립트에서 Django 설정을 로드하면 모델을 그대로 임포트해 저장할 수 있다.
상세 정리
  • 전제: Python 3.4 이상이 설치돼 있어야 하며 pip로 Django를 설치한다.
  • 프로젝트 생성: startproject를 실행하면 설정 파일과 URL 설정, WSGI/ASGI 진입점, 관리 스크립트가 만들어진다.
  • 구동 확인: runserver로 띄워 로컬 주소에 접속했을 때 기본 화면이 뜨면 설치가 끝난 것이다.
  • 모델 정의: 예제에서는 상품 정보를 담는 모델을 만들고 필드 타입을 지정한다.
  • 뷰 작성: 목적에 맞는 API 뷰를 만들고 직렬화한 데이터를 Response로 반환한다.
  • URL 매핑: 프로젝트의 urlpatterns에 admin 경로와 함께 API 경로를 추가하고 뷰의 as_view를 연결한다.
  • 데이터 입력: admin.py에서 모델을 등록하면 관리 페이지에서 값을 넣을 수 있어 빠르게 확인할 수 있다.
  • 대안: 값 주입을 관리 페이지 대신 뷰의 get_queryset에서 처리하는 방법도 있다고 언급한다.
  • 결과 확인: 매핑한 경로에 접속해 JSON이 나오면 API가 정상 동작하는 것이다.
  • 수집 대상: 웹페이지의 각 요소가 화면에서 차지하는 위치와 크기 정보를 모으는 것이 목표다.
  • 도구 구성: Selenium의 웹드라이버로 페이지를 열고 lxml로 HTML 트리를 파싱한다.
  • 브라우저 옵션: headless 인자를 넣어 창을 띄우지 않고 실행한다.
  • Django 연동: 스크립트 상단에서 설정 모듈 환경변수를 지정하고 django.setup을 호출하면 모델을 임포트할 수 있다.
  • 파싱 절차: 페이지 소스를 문자열로 받아 HTML 파서로 트리를 만들고 루트부터 모든 요소를 순회한다.
  • 식별자 선택: 각 요소의 고유 값으로 XPath를 쓰고, 그 XPath로 드라이버에서 요소를 다시 찾아 위치와 크기를 얻는다.
  • 저장: 얻은 가로·세로 크기와 x·y 좌표를 모델 인스턴스로 만들어 save를 호출하면 Django DB에 적재된다.
  • 예외 처리: 요소를 찾지 못하는 경우가 있어 순회 전체를 try로 감싸고 실패한 요소는 건너뛴다.
  • 최종 확인: 다시 runserver로 띄워 API 경로에서 수집된 데이터가 JSON으로 나오는지 확인한다.
왜 읽나Django REST Framework로 API를 처음 세우면서 크롤링 결과를 그 API로 바로 내보내야 한다면 두 작업을 잇는 최소 구성이 한 흐름으로 정리돼 있다.
너드팩토리
너드팩토리 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·twilio-engTwilio Engineering·

    Programmable Messaging에서 Verify API로 마이그레이션하기

    Twilio의 Programmable Messaging API로 자체 OTP 솔루션을 운영하던 서비스가 Verify API로 전환하는 방법을 코드 예시와 함께 설명한다. Verify는 OTP 전송·검증을 위한 전용 API로, 전화번호 구매, 토큰 생성, DB 저장·만료 관리를 내부에서 처리해 개발자가 직접 구현할 코드를 크게 줄인다.

    요약 이어보기
    #authentication#twilio#sms+2
  2. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 2부

    포스타입 백엔드 엔지니어가 벡터 기반 개인화 추천 시스템을 실제 운영하며 맞닥뜨린 성능 장애와 용량 문제를 해결한 과정을 담은 2부다. 수백만 개의 벡터 KNN 검색이 피크 시간대에 전체 Elasticsearch 검색 성능을 흔드는 문제부터 클러스터 OOM 사태까지, 쿼리 최적화와 인프라 분리 두 가지 경로로 근본 해결에 이른다.

    요약 이어보기
    #elasticsearch#vector-search#recommendation-system+2
  3. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 1부

    포스타입이 태그 기반 추천의 한계를 극복하고 벡터 임베딩 기반 개인화 추천 시스템을 구축한 과정을 담은 1부다. 유사한 콘텐츠가 다른 용어를 쓰거나 동일한 태그가 전혀 다른 톤의 콘텐츠를 가리키는 문제를 임베딩 벡터로 해결하고, OpenSearch의 HNSW ANN 검색으로 수백만 벡터를 실시간 검색하는 시스템을 구축해 구매율 15% 향상을 달성했다.

    요약 이어보기
    #opensearch#vector-search#recommendation-system+2