JavaScript에서 웹 스크래핑 시작하기

웹 스크래핑은 코딩 세계에서 가장 흥미로운 것 중 하나입니다.

웹 스크래핑이란 무엇입니까?

왜 존재합니까?

답을 찾아봅시다.

웹 스크래핑이란 무엇입니까?

웹 스크래핑은 웹사이트에서 데이터를 추출하는 자동화된 작업입니다.

웹 스크래핑의 많은 응용 프로그램이 있습니다. 제품 가격을 추출하고 다른 전자 상거래 플랫폼과 비교합니다. 웹에서 일일 견적 받기. Google, Yahoo 등과 같은 나만의 검색 엔진 구축 목록은 계속됩니다.

웹 스크래핑으로 생각보다 많은 일을 할 수 있습니다. 웹 사이트에서 데이터를 추출하는 방법을 알게 되면 데이터로 원하는 모든 작업을 수행할 수 있습니다.

웹사이트에서 데이터를 추출하는 프로그램을 웹 스크레이퍼라고 합니다. JavaScript로 웹 스크레이퍼를 작성하는 방법을 배우게 됩니다.

웹 스크래핑에는 주로 두 부분이 있습니다.

  • 요청 라이브러리와 헤드리스 브라우저를 사용하여 데이터를 가져옵니다.
  • 데이터를 구문 분석하여 데이터에서 원하는 정확한 정보를 추출합니다.

더 이상 고민하지 않고 시작하겠습니다.

프로젝트 설정

NodeJS 설치 가이드를 확인하지 않은 경우 Node가 설치되어 있다고 가정합니다.

JavaScript에서 웹 스크래핑을 위해 node-fetch 및 cheerio 패키지를 사용할 것입니다. 타사 패키지와 함께 작동하도록 npm으로 프로젝트를 설정해 보겠습니다.

설정을 완료하는 단계를 빠르게 살펴보겠습니다.

  • web_scraping이라는 디렉토리를 생성하고 해당 디렉토리로 이동합니다.
  • npm init 명령을 실행하여 프로젝트를 초기화합니다.
  • 선호도에 따라 모든 질문에 답하십시오.
  • 이제 명령을 사용하여 패키지를 설치하십시오.
npm install node-fetch cheerio

설치된 패키지의 모습을 살펴보겠습니다.

노드 가져오기

패키지 node-fetch는 window.fetch를 노드 js 환경으로 가져옵니다. HTTP 요청을 만들고 원시 데이터를 얻는 데 도움이 됩니다.

안녕

패키지 안녕 원시 데이터에서 필요한 정보를 구문 분석하고 추출하는 데 사용됩니다.

두 개의 패키지 node-fetch 및 cheerio는 JavaScript의 웹 스크래핑에 충분합니다. 패키지가 제공하는 모든 방법을 보지는 않을 것입니다. 웹 스크래핑의 흐름과 그 흐름에서 가장 유용한 방법을 살펴보겠습니다.

  웹페이지를 PDF로 변환하는 방법: 12가지 최고의 도구

웹스크래핑을 배우게 됩니다. 자, 일을 시작합시다.

크리켓 월드컵 목록 긁기

여기 이 섹션에서는 실제 웹 스크래핑을 수행할 것입니다.

우리는 무엇을 추출하고 있습니까?

섹션의 제목으로 쉽게 짐작할 수 있을 것 같습니다. 네, 당신이 생각하는 것이 모두 맞습니다. 지금까지의 크리켓 월드컵 우승팀과 준우승팀을 모두 추출해 봅시다.

  • 프로젝트에 extract_cricket_world_cups_list.js라는 파일을 만듭니다.
  • 우리는 위키백과 크리켓 월드컵 페이지에서 원하는 정보를 얻을 수 있습니다.
  • 먼저 node-fetch 패키지를 사용하여 원시 데이터를 가져옵니다.
  • 아래 코드는 위 Wikipedia 페이지의 원시 데이터를 가져옵니다.
const fetch = require("node-fetch");

// function to get the raw data
const getRawData = (URL) => {
   return fetch(URL)
      .then((response) => response.text())
      .then((data) => {
         return data;
      });
};

// URL for data
const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup";

// start of the program
const getCricketWorldCupsList = async () => {
   const cricketWorldCupRawData = await getRawData(URL);
   console.log(cricketWorldCupRawData);
};

// invoking the main function
getCricketWorldCupsList();

URL에서 원시 데이터를 얻었습니다. 이제 원시 데이터에서 필요한 정보를 추출할 차례입니다. 패키지 cheerio를 사용하여 데이터를 추출해 봅시다.

cheerio로 HTML 태그와 관련된 데이터를 추출하는 것은 식은 죽 먹기입니다. 실제 데이터에 들어가기 전에, cheerio를 사용하여 몇 가지 샘플 데이터 구문 분석을 살펴보겠습니다.

  • cheerio.load 메서드를 사용하여 HTML 데이터를 구문 분석합니다.
const parsedSampleData = cheerio.load(
      `<div id="container"><p id="title">I'm title</p></div>`
   );
  • 위의 HTML 코드를 구문 분석했습니다. 그것에서 p 태그 콘텐츠를 추출하는 방법은 무엇입니까? JavaScript DOM 조작의 선택기와 동일합니다.

console.log(parsedSampleData(“#title”).text());

원하는 대로 태그를 선택할 수 있습니다. 에서 다양한 방법을 확인할 수 있습니다. 체리오 공식 홈페이지.

  • 이제 월드컵 목록을 추출할 차례입니다. 정보를 추출하려면 페이지에 정보가 있는 HTML 태그를 알아야 합니다. 로 이동 크리켓 월드컵 Wikipedia 페이지 페이지를 검사하여 HTML 태그 정보를 얻습니다.

다음은 전체 코드입니다.

const fetch = require("node-fetch");
const cheerio = require("cheerio");

// function to get the raw data
const getRawData = (URL) => {
   return fetch(URL)
      .then((response) => response.text())
      .then((data) => {
         return data;
      });
};

// URL for data
const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup";

// start of the program
const getCricketWorldCupsList = async () => {
   const cricketWorldCupRawData = await getRawData(URL);

   // parsing the data
   const parsedCricketWorldCupData = cheerio.load(cricketWorldCupRawData);

   // extracting the table data
   const worldCupsDataTable = parsedCricketWorldCupData("table.wikitable")[0]
      .children[1].children;

   console.log("Year --- Winner --- Runner");
   worldCupsDataTable.forEach((row) => {
      // extracting `td` tags
      if (row.name === "tr") {
         let year = null,
            winner = null,
            runner = null;

         const columns = row.children.filter((column) => column.name === "td");

         // extracting year
         const yearColumn = columns[0];
         if (yearColumn) {
            year = yearColumn.children[0];
            if (year) {
               year = year.children[0].data;
            }
         }

         // extracting winner
         const winnerColumn = columns[3];
         if (winnerColumn) {
            winner = winnerColumn.children[1];
            if (winner) {
               winner = winner.children[0].data;
            }
         }

         // extracting runner
         const runnerColumn = columns[5];
         if (runnerColumn) {
            runner = runnerColumn.children[1];
            if (runner) {
               runner = runner.children[0].data;
            }
         }

         if (year && winner && runner) {
            console.log(`${year} --- ${winner} --- ${runner}`);
         }
      }
   });
};

// invoking the main function
getCricketWorldCupsList();

그리고 여기 스크랩한 데이터가 있습니다.

Year --- Winner --- Runner
1975 --- West Indies --- Australia
1979 --- West Indies --- England
1983 --- India --- West Indies
1987 --- Australia --- England
1992 --- Pakistan --- England
1996 --- Sri Lanka --- Australia
1999 --- Australia --- Pakistan
2003 --- Australia --- India
2007 --- Australia --- Sri Lanka
2011 --- India --- Sri Lanka
2015 --- Australia --- New Zealand
2019 --- England --- New Zealand

멋져요 😎, 그렇죠?

  Linux에서 Itch.io로 게임하는 방법

스크래핑 템플릿

URL에서 원시 데이터를 가져오는 것은 모든 웹 스크래핑 프로젝트에서 일반적입니다. 변경되는 유일한 부분은 요구 사항에 따라 데이터를 추출하는 것입니다. 아래 코드를 템플릿으로 사용해 볼 수 있습니다.

const fetch = require("node-fetch");
const cheerio = require("cheerio");
const fs = require("fs");
// function to get the raw data
const getRawData = (URL) => {
   return fetch(URL)
      .then((response) => response.text())
      .then((data) => {
         return data;
      });
};
// URL for data
const URL = "https://example.com/";
// start of the program
const scrapeData = async () => {
   const rawData = await getRawData(URL);
   // parsing the data
   const parsedData = cheerio.load(rawData);
   console.log(parsedData);
   // write code to extract the data
   // here
   // ...
   // ...
};
// invoking the main function
scrapeData();

결론

웹 페이지를 긁는 방법을 배웠습니다. 이제 코딩을 연습할 차례입니다.

또한 클라우드 기반 웹 스크래핑 솔루션을 탐색하기 위해 인기 있는 웹 스크래핑 프레임워크를 확인하는 것이 좋습니다.

행복한 코딩 🙂

기사를 재미있게 읽으셨나요? 세계와 공유하는 것은 어떻습니까?