1. 크롤링
크롤링(crawling)이란 인터넷에서 데이터를 검색해 필요한 정보를 스크랩(scrab)하는 것이다.
사용자가 필요한 키워드를 하나씩 검색해서 정보를 얻고 가공하여 저장하는 기술이다.
그리고 이런 크롤링을 해주는 프로그램을 크롤러라고 한다.
크롤링을 한다는 것은 무엇일까?
우리가 아래 사진처럼 웹페이지에서 마우스를 이용해서 드래그하여 복사 붙여넣기 하는 것도 일종의 크롤링이다.
이 작업을 자동으로, 그리고 필요한 정보들만 수집하게 해주는 과정을 크롤링이다.
2. 데이터의 종류
우리가 크롤링을 한다는 것은 데이터를 긁어온다는 뜻이다.
그런데 이러한 데이터는 종류가 있다.
1) 정형 데이터 Structured Data
우리가 흔히 자주 접하는 것이 정형 데이터이다.
예를 들어 a란 사람의 성별이 남자다, 여자다.
나이가 42살이다, 32살이다.
라고 했을 때 남자 | 여자 | 42 | 32 라는 데이터들이 바로 정형 데이터이다.
데이터베이스의 정해진 규칙에 맞게 입력된 데이터이며 수치 만으로 의미 파악이 쉬운 데이터들을 의미한다.
2) 비정형 데이터 Unstructured Data
비정형 데이터는 정형 데이터의 반대되는 개념이다.
즉 정해진 규칙이 없어서 값의 의미를 쉽게 파악하기 힘든 경우를 뜻한다.
흔히 텍스트, 음성, 영상과 같은 데이터가 비정형 데이터에 속하며 빅데이터라는 개념의 탄생에 비정형 데이터의 역할이 크게 한 몫을 했다.
그동안 의미를 규정하기 힘들었던 대용량의 비정형 데이터를 분석할 수 있게 되었기 때문이다.
(그렇다고 빅데이터가 비정형 데이터만 분삭하는 것은 결코 아니다)
예를 들어 데이터 베이스에 저장된 글의 제목 등을 들 수 있겠다.
3) 반정형 데이터 Semi-structured Data
반이라는 말때문에 정형 데이터와 반대된다는 의미로 받아들여질 수 있지만 결코 아니다.
여기서 반은 semi, 즉 완전하지 않은 절반짜리 정형 데이터라는 뜻이다.
대표적으로 html이나 xml과 같은 포맷을 뜻한다.
이 반정형이라는 것이 참 까다롭고도 이해하기 어려운 개념인데, 쉽게 생각해보자면.
데이터베이스의 데이터들은 정형이거나 비정형이다.
그런데 이 데이터들을 다루는 html이나 xml 포멧을 살펴보면 한 파일에 Column과 Value를 모두 지니고 있다.
데이터 자체도 갖고 있지만 데이터를 저장한다는 데이터도 갖고 있다는 것이다.
그래서 반정형 데이터는 정형이나 비정형 데이터와 완벽하게 분리가 되는 개념이 아니다.
어느 데이터의 일부를 JSON로 내리는 순간 반정형이 되어버린다.
그런데 이 데이터 자체는 분석하기 쉬운 정형 데이터가 있을 수도 있고 분석하기 어려운 비정형 데이터가 포함되어있을 수 있다는 것이다.
이처럼 스키마를 미리 생성해서 만드는지, 아니면 텍스트 안에 모두 다 포함이 되어있는지를 통해 반정형 여부를 판단한 후 그 안에서 정형과 비정형을 가린다.
우리가 데이터를 크롤링할 때는 반정형 데이터나 비정형 데이터를 정형 데이터로 전환하여 가져온다.
3. 크롤러들, 조심해!
그러면 어느 데이터나 마음대로 크롤링해도 괜찮을까?
결코 아니다.
당연히 웹 사이트마다 크롤러들의 접근을 제약하는 규약들이 존재한다(강제성은 없고 권고사항이다).
그것을 로봇 배제 표준(robots.txt)라고 부른다.
robots.txt는 웹사이트의 최상위 경로(=루트)에 있어야 한다. 즉, 사이트를 치고 슬래시 후 바로 robots.txt를 넣으면 볼 수 있다.
아래의 예를 눌러보면 바로 이동한다.
https://www.daum.net/robots.txt
https://www.naver.com/robots.txt
http://world.kbs.co.kr/robots.txt
http://ytn.co.kr/robots.txt
이제 다음으로는 jsoup 라이브러리를 사용하여 웹크롤링을 실제로 해보는 것을 알아보려한다.
'⁂ Java > : Crawling' 카테고리의 다른 글
[JAVA] 웹 크롤링(Web Crawling) 2 : jsoup으로 크롤링하기 (1) | 2022.09.23 |
---|