개발자의 끄적끄적

[javascript] Crawling (크롤링) 본문

개발/javascript & jquery

[javascript] Crawling (크롤링)

효벨 2020. 2. 26. 02:00
728x90
반응형

[javascript] Crawling (크롤링) 

 

Crawling (Web Scraping)

 

- 특정 페이지에 있는 정보들을 내가 원하는 포맷으로 가져오는 것

 

- 컴퓨터 소프트웨어 기술로 웹 사이트들에서 원하는 정보를 추출하는 것을 의미

 

- 웹 사이트를 자동으로 돌아다니며 분석 및 저장 등을 하는 행위 정도로 저장할 수 있음

 

- 사람들이 웹페이지에 직접 접속해서 정보를 읽어들이는 것과 유사

 

- 인터넷상에 흩어져 있는 자료들을 사람 대신에 프로그램을 통하여 서핑하며 수집과 가공을 하는 것

 

- 이때 프로그램의 구성에 따라 서핑 능력 차이가 발생하게 되는데 대표적으로 자바스크립트의 처리를 하는지 못하는지에 여부가 있음

 

 

 

 

크롤링 매커니즘

 

1. 크롤링 대상선정 (API 또는 웹 문서)

  • 웹 상의 데이터는 고유한 ID를 가지는데 이를 URI이라 부르며 웹 사이트 주소인 URL과 URN이 있음

  • 간단하게 과일에 대한 네이버 검색 결과를 크롤링하려면 아래의 결과에 대한 URL을 선정하는 과정

 

2. 데이터 로드

  • 데이터 로드는 웹사이트를 켜는 것과 같음

  • 만약 API라면 XML, JSON 문서가 될 것이고, 웹 페이지라면 HTML 문서를 다운 받는 것

 

3. 데이터 분석

  • 로드된 데이터에서 필요한 부분을 뽑아내는 것을 의미 (웹 사이트에서는 사용자가 필요로 하지 않는 부분이 많음)

  • 어떠한 부분을 수집할지, 어떤 부분을 수집하지 않을지 선정하는 과정

 

4. 수집

  • 데이터 분석 과정을 통해서 수집할 내용을 선정했다면 이를 추출하여 파일 또는 데이터를 메모리상에 저장하는 과정 

 

 

 

크롤링을 하기전 알아야하는 지식

 

HTTP Method

 

- Get

  • 리소스 요청 (크롤링에 주로 사용) => 받아들이는 역활

  • 주소와 함께 메시지를 남김

  • 파일 업로드 불가

  • 잘 설계된 서비스라면 주로 조회 요청시 사용

  • 실생활에 비유하자면 엽서

 

- POST

  • 대기 리소스 추가 요청이나 수정, 삭제 목적으로 사용 (크롤링에 주로 사용) => 사용자가 추가로 요청하는 것

  • 주소와 함께 메시지나 파일도 보낼 수 있음

  • 파일 업로드 지원

  • 잘 설계된 서비스에서 주로 추가, 수정, 삭제 요청시에 사용

  • 실생활에 비유하자면 택배

 

- PUT 

  • 리소스 수정 요청

 

- DELETE 

  • 리소스 삭제 요청

 

- HEAD 

  • HTTP 헤더 정보만 요청, 해당 자원의 존재 여부를 확인하기 위한 목적

 

- OPTIONS 

  • 웹 서버가 지원하는 메소드 종류 반환 요청

 

- TRACE 

  • 클라이언트의 요청을 그대로 반환

 

 

 

 

HTTP 요청 / 응답 패킷 형식

 

요청 패킷

 

- 요청 헤더 : 클라이언트에서 필요한 헤더 Key / Value를 셋팅한 후 요청, 전달

- 첫번째 빈줄 : Header와 Body 구분자

- Body : 클라이언트에서 필요한 Body를 셋팅한 후 요청, 전달

 

 

응답 패킷

 

- 응답 헤더 : 서버에 필요한 Key / Value를 셋팅한 후 응답, 전달

- 첫번째 빈줄 : Header와 Body 구분자

- Body : 서버에서 필요한 Body를 셋팅한 후 요청, 전달

 

 

요청 패킷 vs 응답 패킷

 

- 요청 헤더는 클라이언트에서 필요한 헤더 Key / Value를 셋팅한 후 요청, 전달을 하지만 응답헤더는 서버에 필요한 Key / Value를 셋팅한 후 응답, 전달

 

- 쉽게 생각하면 클라이언트는 사용자이기 때문에 당연히 서버에 요청을 할 것이고 서버는 서비스하는 업체 입장이기 때문에 응답을 해주는 것

(Ex. 클라이언트 - 요청 (음식점의 주문), 서버 - 응답 (주문받은 음식을 전달)

 

 

헤더

 

- HTTP 요청 / 응답 시에 헤더 정보가 Key / Value 형식으로 셋팅됨

 

- 대부분 브라우저에서는 다음 헤더를 설정하는데

  • User-Agent : 브라우저의 종류

  • Referer : 이전 페이지 URL (어떤 페이지를 거쳐왔는지에 대한)

  • Accept-Language : 어떤 언어로 응답을 원하는가

  • Authorization : 인증 정보

 

- 크롤링을 할때는 User-Agent 헤더와 Referer를 커스텀하게 설정할 필요가 있음

  • 서비스에 따라 User-Agent 헤더와 Referer 헤더를 통해 응답을 거부하기도 함 (Ex. 네이버 웹툰)

 

 

바디

 

- HTTP 요청시에는 Body가 없고 응답에만 있음 (요청에는 당연히 없는 것이고 요청에 대한 응답에 있는게 당연함)

(Ex. HTML 코드, 이미지 데이터, JavaScript 코드, CSS 코드 등등)

 

 

 

기타

 

- 파싱

  • 가공되지 않은 문자열에서 필요한 부분을 추출하여 의미있는 (구조화된) 데이터로 만드는 과정

 

- Request의 원리

  • 첫 응답만 받으면 추가 요청이 없음

  • 단순한 요청에 최적화

  • HTML 응답을 받더라도 이에 명시된 이미지/CSS/JavaScript 추가 다운을 수행하지 않지만 직접 다운로드 요청은 가능

 

- Selenium

  • 웹 브라우저 자동화 툴

  • JavaScript/CSS 지원, 기존 GUI 브라우저 자동화 라이브러리

  • 사람이 웹 서핑하는 것과 동일한 환경이지만 그만큼 리소스를 많이 사용

  • 웹 브라우저에서 HTML에 명시된 CSS/JavaScript를 모두 자동 다운로드하여 적용

  • Selenium이 직접하지않고 크롬등의 툴을 가지고 사용하기 때문에 리소스 사용이 많음

 

 

참조 URL

 

https://rednooby.tistory.com/96

https://jcdgods.tistory.com/317

https://www.slideshare.net/2minchul/web-scraping-75314593

 

 

출처 : https://lascrea.tistory.com/186

 

반응형
Comments