웹 스크래핑은 코딩 세계에서 가장 흥미로운 것 중 하나입니다.
웹 스크래핑이란 무엇입니까?
왜 존재합니까?
답을 찾아봅시다.
목차
웹 스크래핑이란 무엇입니까?
웹 스크래핑은 웹사이트에서 데이터를 추출하는 자동화된 작업입니다.
웹 스크래핑의 많은 응용 프로그램이 있습니다. 제품 가격을 추출하고 다른 전자 상거래 플랫폼과 비교합니다. 웹에서 일일 견적 받기. 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의 웹 스크래핑에 충분합니다. 패키지가 제공하는 모든 방법을 보지는 않을 것입니다. 웹 스크래핑의 흐름과 그 흐름에서 가장 유용한 방법을 살펴보겠습니다.
웹스크래핑을 배우게 됩니다. 자, 일을 시작합시다.
크리켓 월드컵 목록 긁기
여기 이 섹션에서는 실제 웹 스크래핑을 수행할 것입니다.
우리는 무엇을 추출하고 있습니까?
섹션의 제목으로 쉽게 짐작할 수 있을 것 같습니다. 네, 당신이 생각하는 것이 모두 맞습니다. 지금까지의 크리켓 월드컵 우승팀과 준우승팀을 모두 추출해 봅시다.
- 프로젝트에 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
멋져요 😎, 그렇죠?
스크래핑 템플릿
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();
결론
웹 페이지를 긁는 방법을 배웠습니다. 이제 코딩을 연습할 차례입니다.
또한 클라우드 기반 웹 스크래핑 솔루션을 탐색하기 위해 인기 있는 웹 스크래핑 프레임워크를 확인하는 것이 좋습니다.
행복한 코딩 🙂
기사를 재미있게 읽으셨나요? 세계와 공유하는 것은 어떻습니까?