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 설정: 크롤러의 정체를 나타내는 문자열
- 예: Mozilla/5.0 (compatible; MyCrawler/1.0; +http://www.example.com/crawler)
- 헤더 구성: 필요한 경우 쿠키, 인증 토큰 등 포함
- 딜레이 적용: 서버 부하를 줄이기 위해 요청 간격 조절
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 실행 후에 생성되는 동적 렌더링의 경우가 그러하다.
- 다음 방법을 통해 동적 웹 페이지를 크롤링 시도할 수 있다.
- Selenium, Puppeteer 등을 이용하여 헤드리스 브라우저 환경에서 JavaScript 실행한다.
- 웹 페이지에서 사용하는 API 엔드포인트를 직접 호출하여 데이터 수집한다.
- Splash, Rendertron 등의 서비스를 이용하여 JavaScript 렌더링된 페이지 가져온다.
3-5. 크롤러 설계 시 고려 사항
3-5-1. URL 관리
- 쿼리 스트링 등으로 인해 동일한 콘텐츠를 가진 다른 중복 URL을 처리한다.
- 상대 경로 링크를 절대 경로로 변환하여 처리한다.
- 대소문자 구분, 슬래시(/) 처리 등 일관성 유지하도록 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. 웹 표준과 크롤링
- W3C 웹 표준을 준수한 웹 페이지는 크롤러가 파싱하기 용이하다.
- 올바른 시맨틱 태그 사용으로 크롤링 효율 증가시킬 수 있다.
- <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 |