크롤링 잘하는 방법
콘텐츠 수집 → HTTP 통신(백엔드)
스크래핑 → 추출한 HTML 분석(프론트엔드)
- HTTP/HTML 관련 지식 없이 쉽게 크롤링/스크래핑을 하게 해주는 다양한 라이브러리와 프레임워크가 존재
- 그러나 제대로 크롤러를 개발하고 운영하려면 라이브러리/프레임워크의 표준 기능만으로는 부족하거나 예외 상황에 대처할 수 없는 경우가 많음
- 따라서 크롤링을 잘하기위해서는 HTTP통신과 HTML등 웹 기술에대한 지식이 필요
빠른 HTTP/CSS 이해를 위한 무료 강의(칸 아카데미)
빠른 JS 이해를 위한 무료 강의(칸 아카데미)
규칙
- 크롤링 대상 서버에 심한 부하 걸지 말기
- 크롤링 대상 서버가 존재하지 않으면 크롤러는 존재할 수 없음.
- 동시 요청 X
- 요청 간격 최소 1초 이상
- robots.txt에 크롤링 간격이 지정되어 있다면 그 시간에 맞춰서 크롤링 할 것
- 크롤링으로 추출한 콘텐츠의 저작권 지키기
- 검색엔진을 제외(저작권법 28조)하고는 저작권을 꼭 지켜야함
- 크롤러가 수집한 콘텐츠도 저작권을 가지고 있을 수 있음. 따라서 크롤링해서 추출한 콘텐츠도 저작권법을 따라야함.
- 저작권 침해 불법 콘텐츠를 수집하는 크롤러는 불법으로 간주될 수 있음. 저작권자의 요청에 대비해 해당 콘텐츠를 크롤링 결과에서 제외할 수 있게 해야함.
- 크롤링 거부 의사를 밝힌 웹 사이트와 웹 페이지는 크롤링하지 않기
- robots.txt 확인하기
- 크롤러의 User-Agent 헤더에 크롤러와 관련된 설명 페이지 URL을 입력하고 여기에 크롤러의 목적, 크롤링한 정보의 사용 용도, 연락처 등을 적기
▶ 저작권 법 확인하기
구글 Search Console을 사용하면 운영하고 있는 웹 사이트에 불법적인 크롤러가 접근하고 있는지, 아닌지 여부를 확인할 수 있다.
크롤링이 어려운 경우
1. 웹 사이트가 규칙을 잘 지키지 않고 만들어졌을 때
- HTTP 요청에 대해 적절한 응답 헤더와 상태 코드를 제공하지 못하는 경우
- 구조가 잘못된 HTML 페이지와 meta 태그를 가지고 있는 경우
위와 같은 규칙을 지키지 않은 경우 등 다양한 경우 크롤링이 힘들어진다. 전문은 링크 참고.
2. 크롤링하는 웹 사이트의 양이 많은 경우
- 크롤러의 요청 간격을 짧게, 병렬적으로 크롤러 실행 → 시간 단축 → 그러나 크롤링 대상에 피해를 줄 수 있음
- 따라서 효율적인 크롤링이 필요
3. JS/Ajax
- 동적인 HTML 생성 → 단순한 방법으로는 크롤링 불가
- Selenium 등 웹 드라이버 등을 사용해서 크롤링 가능
셀레니움 관련 정보는 위키피디아를 보면 자세히 나와있다.
그러나 셀레니움과 같은 웹 드라이버를 사용하면 크롤러가 매우 무거워진다(실제로 웹을 사람이 사용하는 것처럼 동작시킴). 그러니 사용을 최소화하는 것이 좋다.
더보기
웹 드라이버는 실제 브라우저를 조작하는 도구다.
<웹 드라이버란?>
- Selenium은 원래 웹 애플리케이션 테스트 도구
- WebDriver란 실제 브라우저의 조작을 자동화하기 위한 라이브러리를 통합한 것
- WebDriver를 사용해 크롤러를 만들면 진짜 웹 브라우저를 사용하는 것이므로 자바스크립트를 돌릴 수 있다 → 자바스크립트로 동적 생성되는 HTML을 추출할 수 있다.
<웹 드라이버 사용 시 장, 단점>
장점:
- 버튼 또는 링크를 클릭하는 이벤트 처리도 모두 프로그래밍으로 조작 가능 → 사람이 실제 브라우저를 사용하는 상태 재현 가능
단점:
- 실제로 브라우저를 실행하므로 머신 리소스를 많이 사용
- 조작 시점을 정확하게 맞출 수 있게 정밀한 프로그래밍이 필요
- 동작이 불안정
따라서 최후의 수단으로 사용하는 것이 좋다.
'Crawling' 카테고리의 다른 글
[크롤링/06] 인증이 필요한 페이지 (0) | 2021.03.22 |
---|---|
[크롤링/05]효율적인 크롤링 하는 방법 (0) | 2021.03.22 |
[크롤링/04] HTTP 기본 총 정리 (0) | 2021.03.22 |
[크롤링/03] 라이브러리/프레임워크 (0) | 2021.03.22 |
[크롤링/01] 크롤러의 개념과 동작 (0) | 2021.03.22 |