웹 크롤러란 무엇입니까? | Node.js 및 JavaScript로 간단한 웹 크롤러 빌드

4619 단어
우리 모두는 거의 매일 검색 엔진을 사용합니다. 대부분의 사람들이 검색 엔진에 대해 이야기할 때 실제로는 World Wide Web 검색 엔진을 의미합니다. 검색 엔진에 대한 매우 피상적인 개요는 사용자가 검색 용어를 입력하고 검색 엔진이 해당 검색 용어와 관련된 모든 관련 리소스 목록을 제공한다고 제안합니다. 그러나 사용자에게 리소스 목록을 제공하려면 검색 엔진이 리소스가 인터넷에 존재한다는 사실을 알아야 합니다.
검색 엔진은 인터넷에 어떤 웹사이트가 있는지 마술처럼 알지 못합니다. 이것이 바로 웹 크롤러의 역할이 그림에 등장하는 곳입니다.

웹 크롤러란 무엇입니까?



웹 크롤러는 인터넷을 통해 콘텐츠를 다운로드하고 인덱싱하는 봇입니다. 이러한 봇의 목표는 인터넷의 모든 웹 페이지에 대한 간략한 아이디어를 얻거나 필요할 때 정보 검색이 쉬워지도록 하는 것입니다.
웹 크롤러는 독자가 특정 책을 더 쉽게 찾을 수 있도록 해당 책의 카탈로그를 만드는 도서관에서 책을 정리하는 사서와 같습니다. 책을 분류하기 위해 사서는 주제, 요약 및 필요한 경우 내용의 일부를 읽어야 합니다.

웹 크롤러는 어떻게 작동합니까?



인터넷에 총 몇 개의 웹 페이지가 존재하는지 아는 것은 매우 어렵습니다. 웹 크롤러는 특정 수의 알려진 URL로 시작하여 해당 웹 페이지를 크롤링하면서 다른 웹 페이지에 대한 링크를 찾습니다. 웹 크롤러는 특정 정책에 따라 크롤링할 항목과 크롤링 빈도를 결정합니다.
어떤 웹페이지를 먼저 크롤링할 것인지도 몇 가지 매개변수를 고려하여 결정됩니다. 예를 들어 방문자가 많은 웹페이지는 시작하기에 좋은 옵션이며 검색 엔진에서 색인을 생성합니다.

Node.js 및 JavaScript로 간단한 웹 크롤러 빌드


cheeriorequest 모듈을 사용할 것입니다.
다음 명령을 사용하여 이러한 종속성을 설치합니다.

npm install --save cheerio
npm install --save request


다음 코드는 필요한 모듈을 가져오고 Hacker News 에 요청합니다.
요청이 성공했는지 확인하기 위해 응답의 상태 코드를 콘솔에 기록합니다.

var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');

request("https://news.ycombinator.com/news", (error, response, body) => {
  if(error) {
    console.log("Error: " + error);
  }
  console.log("Status code: " + response.statusCode);
});

fs 모듈은 파일을 처리하는 데 사용되며 내장 모듈입니다.

브라우저의 개발자 도구를 사용하여 데이터 구조를 관찰합니다. tr 클래스의 athing 요소가 있음을 알 수 있습니다.



모든 tr.athing 요소를 살펴보고 자식td.title 요소를 선택하여 게시물 제목을 가져오고 a 요소를 선택하여 하이퍼링크를 가져옵니다. 이 작업은 이전 코드 블록의 console.log 뒤에 다음 코드를 추가하여 수행됩니다.

  var $ = cheerio.load(body);

  $('tr.athing:has(td.votelinks)').each(function( index ) {
    var title = $(this).find('td.title > a').text().trim();
    var link = $(this).find('td.title > a').attr('href');
    fs.appendFileSync('hackernews.txt', title + '\n' + link + '\n');
  });


채용과 관련된 게시물도 건너뜁니다(주의 깊게 관찰하면 해당 게시물의 tr.athing 요소에 자식td.votelinks 요소가 없음을 알 수 있습니다.



이제 전체 코드는 다음과 같습니다.

var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');

request("https://news.ycombinator.com/news", function(error, response, body) {
  if(error) {
    console.log("Error: " + error);
  }
  console.log("Status code: " + response.statusCode);

  var $ = cheerio.load(body);

  $('tr.athing:has(td.votelinks)').each(function( index ) {
    var title = $(this).find('td.title > a').text().trim();
    var link = $(this).find('td.title > a').attr('href');
    fs.appendFileSync('hackernews.txt', title + '\n' + link + '\n');
  });

});


데이터는 hackernews.txt라는 파일에 저장됩니다.


간단한 웹 크롤러가 준비되었습니다!!

참조


  • https://www.cloudflare.com/learning/bots/what-is-a-web-crawler/
  • http://www.netinstructions.com/simple-web-scraping-with-node-js-and-javascript/
  • https://computer.howstuffworks.com/internet/basics/search-engine1.htm
  • 좋은 웹페이지 즐겨찾기