이 게시물에서는 웹 스크래핑을 위해 Nodejs에서 제공하는 모든 도구/라이브러리에 대해 설명합니다. 먼저 쉽고 기본적인 라이브러리로 시작한 다음 고급 도구로 진행합니다. 각 도구의 장단점에 대해 간략하게 설명합니다. 스크래핑 하는 동안 도움이 될 수 있는 모든 도구의 모든 세부 사항을 강조하려고 노력할 것입니다.
https://www.scrapingdog.com/blog/web-scraping-101-with-nodejs
Libraries
데이터 추출 중에 명심해야 할 가장 중요한 사항에 대해 이야기하겠습니다.
Simplecrawler
Simplecrawler는 웹 사이트 크롤링을 위한 기본적이고 유연하며 강력한 API를 제공하도록 설계되었습니다. 매우 큰 웹 사이트를 보관, 분석 및 검색하기 위해 작성되었으며 수십만 페이지를 스크랩하고 문제 없이 수십 기가 바이트를 디스크에 기록했습니다. 디스크에 고정하고 해동 할 수 있는 유연한 대기열 시스템이 있습니다.
Example
Simplecrawler를 이해하기 위해 이 웹 사이트를 살펴보겠습니다. Nodejs를 설치했으며 Nodejs 스크립트를 저장할 작업 디렉토리가 있다고 가정합니다. 따라서 먼저 Simplecrawler를 설치합니다.
npm install --save simplecrawler
내 폴더에 scraper.js 파일을 만들었습니다. 그 파일 안에 쓰기.
var Crawler = require("simplecrawler");
var crawler = new Crawler("https://books.toscrape.com/");
크롤링 할 도메인과 먼저 가져올 리소스를 나타내는 URL을 생성자에 제공합니다. 웹 사이트를 스크랩 하기 전에 3 가지를 구성 할 수 있습니다.
a) Request Interval
crawler.interval = 10000; // Ten seconds
b) Concurrency of requests
crawler.maxConcurrency = 3;
c) Number of links to fetch
crawler.maxDepth = 1; // Only first page is fetched (with linked CSS & images)// Or:crawler.maxDepth = 2; // First page and discovered links from it are fetched
이 라이브러리는 여기에서 찾을 수 있는 더 많은 속성도 제공합니다.
수신하려는 이벤트에 대한 이벤트 리스너도 설정해야 합니다. crawler.fetchcomplete 및 crawler.complete는 시작하기에 좋은 위치입니다.
crawler.on("fetchcomplete", function(queueItem, responseBuffer, response) { console.log("I just received %s (%d bytes)", queueItem.url, responseBuffer.length); console.log("It was a resource of type %s", response.headers['content-type']);});
그런 다음 만족스럽고 갈 준비가 되면 크롤러를 시작하십시오! 더 이상 찾을 수 없을 때까지 다운로드 할 도메인에서 연결된 리소스를 찾는 대기열을 살펴 봅니다.
crawler.start();
장점
단점
Cheerio
Cheerio는 HTML 및 XML 문서를 구문 분석하는 데 사용되는 라이브러리입니다. 다운로드 한 데이터에 jquery 구문을 사용할 수 있습니다. Cheerio는 jQuery 라이브러리에서 모든 DOM 불일치 및 브라우저 크랙을 제거하여 진정으로 멋진 API를 보여줍니다. 선택기를 사용하여 원하는 데이터를 필터링 할 수 있습니다. Cheerio는 매우 간단하고 일관된 DOM 모델로 작동합니다. 결과적으로 구문 분석, 조작 및 렌더링이 매우 효율적입니다. 예비 엔드 투 엔드 벤치 마크에 따르면 cheerio는 JSDOM보다 약 8 배 더 빠릅니다.
Example
이 URL에서 'Books to Scrape'라는 헤더 행을 긁어냅니다.
먼저 cheerio를 설치해야 합니다.
npm install cheerio
그런 다음 다음 코드를 입력하여 원하는 텍스트를 추출하십시오.
const cheerio = require(‘cheerio’)
const axios = require(‘axios’);var scraped_data =await axios.get("https://books.toscrape.com/");const $ = cheerio.load(scraped_data.data)
var name = $(".page_inner").first().find("a").text();
console.log(name)//Books to Scrape
먼저 웹 사이트에 HTTP 요청을 한 다음 데이터를 scraped_data에 저장했습니다. cheerio에 로드 한 다음 클래스 이름을 사용하여 데이터를 가져옵니다.
장점
단점
Puppeteer
Puppeteer는 DevTools 프로토콜을 통해 Chrome 또는 Chromium을 제어하는 고급 API를 제공하는 노드 라이브러리입니다. Puppeteer는 기본적으로 헤드리스로 실행되지만 전체 (헤드리스가 아닌) Chrome 또는 Chromium을 실행하도록 구성 할 수 있습니다. 또한 헤드리스가 아닌 모드에서 실행을 실시간으로 볼 수 있도록 변경할 수도 있습니다. 작업을 실행하기 위해 외부 드라이버에 대한 종속성을 제거합니다. Puppeteer는 크롬을 더 잘 제어합니다.
Example
이 웹 사이트를 스크랩하겠습니다. 먼저 꼭두각시 라이브러리를 설치하십시오.
npm i puppeteer --save
그런 다음 scraper.js 파일에 다음 코드를 작성하십시오.
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
var results = await page.goto('https://books.toscrape.com/');
await page.waitFor(1000);
browser.close();
console.log(results);
대박! 한 줄씩 분류 해 보겠습니다.
먼저 브라우저를 만들고 헤드리스 모드를 false로 설정합니다. 이를 통해 무슨 일이 일어나고 있는지 정확히 볼 수 있습니다.
const browser = await puppeteer.launch({headless: false});
그런 다음 브라우저에 새 페이지를 만듭니다.
const page = await browser.newPage();
다음으로 books.toscrape.com URL로 이동합니다.
var results = await page.goto('https://books.toscrape.com/');
1000 밀리 초의 지연을 추가했습니다. 일반적으로 필요하지는 않지만 페이지의 모든 항목이로드되도록합니다.
await page.waitFor(1000);
마지막으로 모든 작업이 완료되면 브라우저를 닫고 결과를 인쇄합니다.
browser.close();
console.log(results);
설정이 완료되었습니다. 데이터가 준비되었습니다!
장점
단점
Playwright
Playwright는 인형과 매우 유사한 단일 API로 Chromium, Firefox, WebKit을 자동화하는 Node.js 라이브러리입니다. Playwright는 항상 친환경적이고 기능이 뛰어나고 안정적이며 빠른 브라우저 간 웹 자동화를 지원하도록 제작되었습니다. 작업 자동화 및 웹 애플리케이션 테스트에서 데이터 마이닝까지.
Example
극작가의 적용을 보여주기 위해 간단한 스크레이퍼를 만들 것입니다. 이 URL에서 첫 번째 책을 긁어냅니다.
이제 Playwright를 설치하겠습니다.
npm i playwright
스크레이퍼 만들기
Playwright로 스크레이퍼를 만드는 것은 이전에 스크래핑 경험이 없더라도 놀랍도록 쉽습니다. JavaScript와 CSS를 이해한다면 케이크 조각이 될 것입니다.
프로젝트 폴더에서 scraper.js라는 파일을 만들고 (또는 다른 이름을 선택) 즐겨 찾는 코드 편집기에서 엽니다. 먼저 간단한 스크립트를 실행하여 Playwright가 올바르게 설치되고 작동하는지 확인합니다.
// Import the playwright library into our scraper.
const playwright = require('playwright');
async function main() {
// Open a Chromium browser. We use headless: false
// to be able to watch what's going on.
const browser = await playwright.chromium.launch({
headless: false
});
// Open a new page / tab in the browser.
const page = await browser.newPage();
// Tell the tab to navigate to the JavaScript topic page.
var results= await page.goto('https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html');
// Pause for 10 seconds, to see what's going on.
await page.waitForTimeout(10000);
// Turn off the browser to clean up after ourselves.
await browser.close();
}
main();
Chromium 창이 열리고 도서 페이지가 성공적으로로드되면 축하합니다. Playwright로 웹 브라우저를 로봇 화 한 것입니다!
결과 변수에는 모든 데이터가 있습니다. 이제 cheerio를 사용하여 모든 정보를 얻을 수 있습니다.
Playwright에서는 버튼을 클릭하는 것이 매우 쉽습니다. 찾고 있는 문자열에 text = 접두사를 붙이면 Playwright가 이 문자열을 포함하는 요소를 찾아 클릭합니다. 또한 페이지에 아직 렌더링 되지 않은 경우 요소가 나타날 때까지 기다립니다. 이것은 인형을 조종하는 사람보다 큰 이점입니다. 클릭하면 페이지가 로드 될 때까지 기다린 다음 cheerio를 사용하여 원하는 정보를 얻어야 합니다. 그러나 지금은 그 방향으로 가고 있지 않습니다.
장점
단점
HTTP Clients
HTTP 클라이언트를 사용하여 서버에 요청을 보내고 응답을 검색 할 수 있습니다. 스크랩 하려는 웹 페이지 또는 서버에 HTTP 요청을 하는데 사용되는 3 개의 라이브러리에 대해 설명합니다.
Axios
브라우저와 node.js 모두에 대한 약속 기반 HTTP 클라이언트입니다. 대상 웹 사이트의 완전한 HTML 코드를 제공합니다. Axios를 사용하여 요청하는 것은 매우 간단하고 간단합니다.
var axios = require(‘axios’);async function main() {
try{
var scraped_data =await axios.get(“https://books.toscrape.com/");
console.log(scraped_data.data);//<DOCTYPE HTML>......//
}catch(err){
console.log(err)
}}main();
다음 명령을 통해 Axios를 설치할 수 있습니다.
npm i axios --save
장점
Unirest
Unirest는 여러 언어로 제공되는 경량 HTTP 라이브러리 모음으로, 오픈 소스 API Gateway Kong도 유지 관리하는 Kong이 구축 및 유지 관리합니다. Unirest를 사용하는 것은 Axios를 사용하는 방법과 유사합니다. Axios의 대안으로 사용할 수 있습니다.
var unirest = require(‘unirest’);async function main() {
try{
var scraped_data =await unirest.get(“https://books.toscrape.com/");
console.log(scraped_data.body);
//<DOCTYPE HTML>……//
}catch(err){
console.log(err)
}}main();
다음 명령을 통해 Unirest를 설치할 수 있습니다.
npm i unirest --save
장점
Superagent
작은 점진적 클라이언트 측 HTTP 요청 라이브러리 및 동일한 API를 사용하는 Node.js 모듈은 많은 고급 HTTP 클라이언트 기능을 지원합니다. Axios와 유사한 API가 있으며 promise 및 async / await 구문을 지원합니다.
const superagent = require(‘superagent’);async function main() {
try{
var scraped_data =await superagent.get(“https://books.toscrape.com/");
console.log(scraped_data.text);
//<DOCTYPE HTML>……//
}catch(err){
console.log(err)
}}main();
다음 명령을 통해 Superagent를 설치할 수 있습니다.
npm i superagent --save
장점
단점
Nightmare
Nightmare는 Segment의 고급 브라우저 자동화 라이브러리입니다. PhantomJs와 비슷하지만 두 배나 빠르며 약간 현대적인 Electron (Atom 텍스트 편집기를 구동하는 동일한 Google Chrome 파생 프레임 워크)을 사용합니다. 원래 API가 없는 사이트에서 작업을 자동화하도록 설계되었지만 UI 테스트 및 크롤링에 가장 자주 사용됩니다.
Nightmare는 무거운 번들이 마음에 들지 않으면 Puppetteer보다 이상적인 선택입니다. 스크레이퍼는 그것을 넘어 뜨릴 수 있는 많은 성가신 코드를 우회합니다. 뿐만 아니라 대부분 클라이언트 측에서 렌더링 되는 웹 사이트는 여전히 스크래핑 가능합니다. 스크래핑에 양식을 반환하기 위해 AJAX 요청을 해야 하는 상황에 처해 있다면 오늘은 멋진 날이 될 것입니다. !
다음 명령을 실행하여 악몽 라이브러리를 설치할 수 있습니다.
npm install nightmare
Nightmare가 설치되면 Duckduckgo 검색 엔진을 통해 Scrapingdog의 웹 사이트 링크를 찾을 수 있습니다.
const Nightmare = require(‘nightmare’)const nightmare = Nightmare()nightmare
.goto(‘https://duckduckgo.com')
.type(‘#search_form_input_homepage’, ‘Scrapingdog’)
.click(‘#search_button_homepage’)
.wait(‘#links .result__a’)
.evaluate(() => document.querySelector(‘#links .result__a’).href)
.end()
.then((link) => {
console.log(‘Scrapingdog Web Link:’, link)//Scrapingdog Web Link: https://www.scrapingdog.com/
})
.catch((error) => {
console.error(‘Search failed:’, error)
})
이제 한 줄씩 이동하겠습니다. 먼저 Nightmare 인스턴스를 만들었습니다. 그런 다음 .goto를 사용하여 Duckduckgo 검색 엔진을 엽니다. 그런 다음 선택기를 사용하여 검색 창을 가져옵니다. .type을 사용하여 검색 창의 값을 'Scrapingdog'로 변경했습니다. 이 모든 작업이 완료되면 제출하겠습니다. Nightmare는 첫 번째 링크가 로드 될 때까지 기다린 후 DOM 메서드를 사용하여 href 속성의 값을 가져옵니다. 링크를 받으면 콘솔에 인쇄됩니다.
장점
단점
요약
따라서 이들은 웹 스크래핑 프로젝트에 사용할 수 있는 오픈 소스 웹 스크래핑 도구 및 라이브러리였습니다. 데이터 수집에만 집중하고 싶다면 언제든지 웹 스크래핑 API를 사용할 수 있습니다.
등록된 댓글이 없습니다.