일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Eclipse
- 코드이그나이터
- css
- 주식
- 자바스크립트
- 자바
- Stock
- SQL
- php
- 오라클
- jquery
- MYSQL
- 공모주 청약
- JavaScript
- linux
- codeigniter
- IPO
- 제이쿼리
- 7월 공모주 청약 일정
- 주식 청약 일정
- 공모주
- 리눅스
- html
- 주식 청약
- Stock ipo
- Oracle
- 6월 공모주 청약 일정
- java
- 맥
- 공모주 청약 일정
- Today
- Total
개발자의 끄적끄적
[javascript] Crawling (크롤링) 본문
[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
'개발 > javascript & jquery' 카테고리의 다른 글
[javascript] 각 단어의 첫글자를 대문자로 (0) | 2020.03.09 |
---|---|
[java] [Spring] 스프링 3.0 에서 파일 업로드 처리 (File Upload) [펌] (0) | 2020.02.28 |
[javascript] Javascript 기반의 압축 라이브러리, jszip [펌] (0) | 2020.02.20 |
[javascript] 정규표현식을 이용한 이메일 유효성 검사 (자바스크립트) [펌] (0) | 2020.02.20 |
[javascript] 카카오톡 공유 api 연동 예제 (0) | 2020.02.19 |