웹은 매일 같이 많은 정보들이 쏟아지고 있기 때문에 누군가가 검색해서 찾아볼 수 있도록 저장하고 관리할 수 있도록 하는 게 크롤링이고 소프트웨어로 만든게 크롤러다 ex) google - 웹 페이지를 분류하고 , 이름 붙이고, 검색이 쉽게 관리한다
📍 What is Cralwler?
조직적, 자동화 된 방법으로 월드 와이드 웹을 탐색하는 컴퓨터 프로그램
- 크롤러가 작동하는 방법은 Seeds라고 불리는 씨앗이 되는 사이트를 정한다 ex) 위키피디아, 네이버, 다음
- 예를들어 네이버라고 하면 무수히 많은 페이지들을 탐색하고 거기에 하이퍼링크들을 리스트업을 해서 각각의 페이지를 인덱싱 처리한다 (재귀적으로 쭉 계속)
📍 웹 크롤러 vs 웹 스크레퍼
- 크롤링 기술은 웹에 대한 많은 지식을 바탕으로 만들기 때문에 뚝딱뚝딱 만들기가 쉽지 않다
- 크롤링 강의를 보면 웹 스크레퍼를 크롤링으로 설명을 하기도 한다
- ❗ 웹 스크레퍼는 사이트에서 관심있는 정보만 추출하는 것으로 크롤러와 다르게 지속적으로 탐색할 필요는 없다 (개발자가 원하는 정보만 획득)
📍 robots.txt
아무 웹 사이트에 들어가서 내 마음대로 크롤링이나 스크레퍼를 하면 되는가❓ = 안된다!❌ 고소당할 수도 있다...
크롤링이나 스크레퍼를 하기 위해서는 필수로 크롤링할 사이트 주소에서 robots.txt 파일을 확인해야한다!
- 네이버의 경우 https://www.naver.com/robots.txt 라고 주소창에 치게 되면 파일이 다운로드 받아진다
- User-agent : 크롤링 봇 이름
- Disallow : 크롤링 금지한다는 뜻
- Allow : 크롤링 허용한다는 뜻
- User-agent가 여러개 적혀있으면 오버라이딩 되는게 아니라 적힌 경우 다 적용이 된다
📍 크롤링에 사용되는 모듈
- Axios + Cheerio
- HTTP 요청과 HTML DOM parser 사용하기
- Axios는 HTTP request를 보낼 수 있는 모듈이다
- Axios로 response 응답 데이터를 스트링으로 받아와서 원하는 정보 추출을 해야하는데 이때 사용하는게 Cheerio이다
- Cheerio는 획득한 HTML 문서를 다루기 쉽게 파싱해준다
- jquery와 문법이 매우 비슷하다
- npm install cheerio
- Selenium, beautifulsoup,scrapy
- Puppeteer
- Axios로 response 응답 데이터를 받아보면 완성된 HTML 파일이 아니라 중간에 로딩중.. 이라고 뜨는 경우가 있는데,
먼저 응답되는 데이터와 데이터를 이후에 전달하는 일이 있기 때문이다.(렌더링 지연)
이럴때 확인 할 수 있는 방법은 개발자도구로 하나하나 다 뜯어서 찾거나(보안이 철저하거나, 조건이 다 맞춰져야 데이터가 들어오는 경우가 있기 때문에 데이터가 잘 안나올 수도 있다) Puppeteer를 사용하는 것이다
- npm i puppeteer
- puppeteer core는 가볍지만 일반 puppeteer에서 다운 받아지는 부분이 함께 다운이 되지 않는 경우가 있기 때문에 core 말고 그냥 puppeteer를 다운 받는게 다른 설정 하지 않고 사용이 가능할 것이다
- Puppeteer를 사용하면 node.js를 통해 크롬 브라우저를 실행한다
- 사용자가 원하는 뷰포트, 네트워크 환경 등 설정 가능하다
- 마우스, 키보드, 터치 스크린 등을 코드를 통해 사용하는 것처럼 구현이 가능
- 타임라인 트레이싱, 스크린샷, PDF 다운로드, 확장 프로그램 테스트 작업 자동화 등 사용가능
- SPA 크롤링과 pre-rendered content 생성이 가능하다
📍 획듟한 데이터를 JSON 파일로 저장하기
- 파일을 저장할때는 fs 모듈을 사용하는데 따로 설치할 필요없이 사용이 가능하다. node에 기본적으로 내장된 모듈이기 때문에
fs.writeFile([path], JSON.stringify([데이터]), (err,date) => {
if(err){
console.log(err);
return
}
})
- 저장된 파일을 열어보면 데이터가 쭉- 붙어서 저장이 되어있을 텐데 오토포멧팅으로 단축키를 눌러주면 보기 쉽게 데이터들이 정렬된다!