TIL | 크롤링 / robots.txt / 사이트 크롤링 정책

김윤희·2022년 9월 13일
0

웹은 매일 같이 많은 정보들이 쏟아지고 있기 때문에 누군가가 검색해서 찾아볼 수 있도록 저장하고 관리할 수 있도록 하는 게 크롤링이고 소프트웨어로 만든게 크롤러다 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를 보낼 수 있는 모듈이다
      • npm install axios
    • 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	
    }
})
  • 저장된 파일을 열어보면 데이터가 쭉- 붙어서 저장이 되어있을 텐데 오토포멧팅으로 단축키를 눌러주면 보기 쉽게 데이터들이 정렬된다!

0개의 댓글