Web Crawling/Web Crawling ?

WEB의 구조

js-kkk 2025. 2. 23. 17:20

3. WEB의 구조

💡웹은 수많은 웹 페이지들이 하이퍼링크로 연결된 거대한 네트워크로 구성되어 있으며, 이러한 연결성을 이용하여 크롤러는 웹 사이트를 탐색하고 필요한 데이터를 수집한다. 웹의 구조와 프로토콜, 그리고 표준화된 문서 형식은 크롤러가 효율적으로 웹을 탐색하고 정보를 추출할 수 있도록 한다.

3-1. WEB 구조 기초

3-1-1. 기본 구성 요소

  • URL (Uniform Resource Locator)
    • 웹에서 자원의 위치를 나타내는 표준화된 주소 체계이다.
    • 프로토콜(http, https), 도메인 이름, 경로, 쿼리 스트링 등으로 구성된다.
  • HTTP/HTTPS 프로토콜
    • 웹 클라이언트와 서버 간의 통신을 위한 프로토콜이다.
    • 요청(Request)과 응답(Response)의 형태로 데이터를 교환한다.
  • HTML (HyperText Markup Language)
    • 웹 페이지를 구성하는 표준 마크업 언어이다.
    • 태그를 사용하여 문서의 구조와 콘텐츠를 정의한다.
  • CSS (Cascading Style Sheets)
    • 웹 페이지의 디자인과 레이아웃을 정의하는 스타일시트 언어이다.
  • JavaScript
    • 웹 페이지의 동적인 기능을 구현하는 스크립트 언어이다.

3-1-2. HTML 문서 구조

  • 기본
    • <!DOCTYPE html> : 문서 유형 선언으로, HTML5 문서임을 명시
    • <html> : 전체 HTML 문서를 감싸는 최상위 태그
    • <head> : 메타데이터, 스타일시트, 스크립트 등 문서의 정보 포함
    • <body> : 실제 웹 페이지에 표시되는 콘텐츠를 포함
  • DOM (Document Object Model)
    • DOM : HTML, XML 문서를 프로그래밍적으로 접근하고 조작할 수 있는 객체 모델
    • DOM 트리 구조 : 문서의 각 요소를 노드로 표현하여 트리 형태로 구조화
    • DOM 조작 : JavaScript 등을 사용하여 DOM 노드에 접근하고 변경 가능

3-1-3. 웹의 연결성 요소

  • 하이퍼링크
    • 웹 페이지 간의 연결을 가능하게 하는 요소
    • <a href="URL"> 태그로 구현
  • 웹 그래프
    • 웹 페이지를 노드로, 하이퍼링크를 엣지로 표현한 거대한 그래프 구조
  • 크롤러 탐색
    • 시작 URL에서 링크를 따라가며 웹 그래프를 탐색
    • 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 등의 알고리즘 사용

3-2. HTTP 프로토콜과 크롤링

3-2-1. HTTP 요청과 응답

  • 요청 메서드
    • GET: 데이터 조회
    • POST: 데이터 생성
    • PUT/PATCH: 데이터 수정
    • DELETE: 데이터 삭제
  • 상태 코드
    • 2xx (성공): 요청이 성공적으로 처리됨
    • 3xx (리다이렉션): 요청한 리소스의 위치 변경
    • 4xx (클라이언트 오류): 잘못된 요청
    • 5xx (서버 오류): 서버에서 요청 처리 실패
  • 헤더(Header)
    • 요청 및 응답에 대한 메타정보 포함
    • User-Agent, Accept, Content-Type 등

3-2-2. 크롤러의 HTTP 요청 구성

  • User-Agent 설정: 크롤러의 정체를 나타내는 문자열
  • 헤더 구성: 필요한 경우 쿠키, 인증 토큰 등 포함
  • 딜레이 적용: 서버 부하를 줄이기 위해 요청 간격 조절

3-3. robots.txt와 사이트맵

3-3-1. robots.txt 파일

  • 웹 사이트에서 크롤러의 접근을 제어하기 위한 표준으로, 사이트의 루트 디렉토리에 위치한다.(https://www.example.com/robots.txt)
  • 구문
User-agent: *
Disallow: /private/
  • User-agent: 적용 대상 크롤러 지정 (*는 모든 크롤러)
  • Disallow: 크롤링을 금지할 경로 지정
  • Allow: 크롤링을 허용할 경로 지정

3-3-2. 사이트맵 (sitemap.xml)

  • 사이트 내의 페이지 URL 목록을 제공하여 크롤러가 효율적으로 페이지를 발견하도록 돕는다.
  • 다음 예시처럼 XML 형식으로 작성된다.
<urlset xmlns="<http://www.sitemaps.org/schemas/sitemap/0.9>">
  <url>
    <loc><https://www.example.com/page1></loc>
    <lastmod>2023-10-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

robots.txt에 사이트맵 위치가 명시되어 있다.

Sitemap: <https://www.example.com/sitemap.xml>

 

 

3-4. 동적 웹 페이지와 크롤링

3-4-1. 동적 렌더링

  • 일반적인 크롤러는 초기 HTML만 받아오므로 동적으로 생성된 콘텐츠를 수집하지 못한다.
  • 웹 페이지를 새로 고침하지 않고도 서버와 비동기 통신하여 데이터를 갱신하는 기술인 AJAX (Asynchronous JavaScript and XML), 웹 페이지의 콘텐츠가 JavaScript 실행 후에 생성되는 동적 렌더링의 경우가 그러하다.
  • 다음 방법을 통해 동적 웹 페이지를 크롤링 시도할 수 있다.
    1. Selenium, Puppeteer 등을 이용하여 헤드리스 브라우저 환경에서 JavaScript 실행한다.
    2. 웹 페이지에서 사용하는 API 엔드포인트를 직접 호출하여 데이터 수집한다.
    3. Splash, Rendertron 등의 서비스를 이용하여 JavaScript 렌더링된 페이지 가져온다.

3-5. 크롤러 설계 시 고려 사항

3-5-1. URL 관리

  1. 쿼리 스트링 등으로 인해 동일한 콘텐츠를 가진 다른 중복 URL을 처리한다.
  2. 상대 경로 링크를 절대 경로로 변환하여 처리한다.
  3. 대소문자 구분, 슬래시(/) 처리 등 일관성 유지하도록 URL을 표준화하여 관리한다.

3-5-2. 상태 유지와 세션

  • 서버로부터 받은 쿠키를 저장하고 이후 요청에 포함한다.
  • 로그인 등 세션이 필요한 경우 세션 정보를 유지하여 크롤링한다.

3-5-3. 데이터 파싱

  • BeautifulSoup (Python), Cheerio (Node.js) 등 HTML 파싱 라이브러리를 사용한다.
  • XPath와 CSS 선택자를 이용하여 DOM 요소를 선택하여 데이터 추출한다.
  • 파싱 오류에 대한 예외 처리 및 로그 기록하여 관리한다.

3-6. 웹 크롤링 확장

3-6-1. 스케줄링과 주기적 크롤링

  • 데이터 갱신 빈도에 따라 크롤링 주기를 결정할 수 있다.
  • ETag, Last-Modified 헤더 등을 이용하여 변경을 감지하고 변경된 페이지만 크롤링할 수 있다.
  • Cron (Linux), Task Scheduler (Windows) 등 자동화 도구로 스케줄링할 수 있다.

3-6-2. 웹 표준과 크롤링

  1. W3C 웹 표준을 준수한 웹 페이지는 크롤러가 파싱하기 용이하다.
  2. 올바른 시맨틱 태그 사용으로 크롤링 효율 증가시킬 수 있다.
  3. <meta> 태그, Open Graph Protocol 등 메타 데이터를 활용하여 추가 정보 수집이 가능하다.

'Web Crawling > Web Crawling ?' 카테고리의 다른 글

CSS 선택자  (0) 2025.02.23
브라우저 렌더링 동작 구조  (0) 2025.02.23
크롤링 데이터 저장  (0) 2025.02.23
OPEN API 란 ?  (0) 2025.02.23
Web Crawling 이란 ?  (0) 2025.02.23