UFO ET IT

Node.js로 실시간으로 웹 페이지 스크랩

ufoet 2020. 11. 18. 21:50
반응형

Node.js로 실시간으로 웹 페이지 스크랩


좋은 점은 Node.js를 사용하여 웹 사이트 콘텐츠를 스크랩하는 것입니다. kayak.com 스타일로 검색을 실행할 수있는 매우 빠른 무언가를 만들고 싶습니다 . 하나의 쿼리가 여러 다른 사이트로 전달되고 결과가 스크랩되어 사용 가능 해지면 클라이언트로 반환됩니다.

이 스크립트가 결과를 JSON 형식으로 제공해야한다고 가정하고 브라우저 또는 다른 웹 애플리케이션에서 직접 처리 할 수 ​​있습니다.

몇 가지 시작점 :

node.js 및 jquery를 사용하여 웹 사이트 스크랩

누구 아이디어가 있습니까?


Node.io 가 케이크를 먹는 것 같습니다 :-)


앞서 언급 한 모든 솔루션은 스크레이퍼를 로컬에서 실행한다고 가정합니다. 즉, 성능이 크게 제한됩니다 (순서대로 실행하거나 제한된 스레드 집합에서 실행하기 때문). 더 나은 접근 방식 인 imho는 기존의 상업용 스크래핑 그리드에 의존하는 것입니다.

다음은 예입니다.

var bobik = new Bobik("YOUR_AUTH_TOKEN");
bobik.scrape({
  urls: ['amazon.com', 'zynga.com', 'http://finance.google.com/', 'http://shopping.yahoo.com'],
  queries:  ["//th", "//img/@src", "return document.title", "return $('script').length", "#logo", ".logo"]
}, function (scraped_data) {
  if (!scraped_data) {
    console.log("Data is unavailable");
    return;
  }
  var scraped_urls = Object.keys(scraped_data);
  for (var url in scraped_urls)
    console.log("Results from " + url + ": " + scraped_data[scraped_urls[url]]);
});

여기서 스크래핑은 원격으로 수행되고 결과가 준비된 경우에만 코드에 콜백이 발행됩니다 (결과가 사용 가능 해지면 결과를 수집하는 옵션도 있음).

Bobik 클라이언트 프록시 SDKhttps://github.com/emirkin/bobik_javascript_sdk 에서 다운로드 할 수 있습니다.


나는 직접 조사를 해왔고 https://npmjs.org/package/wscraper

cheerio.js를 기반으로하는 웹 스크레이퍼 에이전트, 코어 jQuery의 빠르고 유연하며 간결한 구현; request.js 위에 구축되었습니다. http-agent.js에서 영감을 얻음

npmjs.org에 따르면 사용량이 매우 적지 만 관심있는 사람을 찾아 볼 가치가 있습니다.


항상 jQuery가 필요한 것은 아닙니다. 당신은 예를 들어 jsdom에서 반환 된 DOM으로 재생하면 당신은 쉽게 당신이 자신을 필요 걸릴 수 있습니다 참조 (또한 xbrowser 문제에 대한 걱정이 필요 없다 생각.) : https://gist.github.com/1335009 에서 떨어져 복용하지하다는 사실을 node.io, 그냥 당신이 스스로 할 수 있다고 말하면서 ...


ES7 / 약속을 사용하는 새로운 방법

일반적으로 긁을 때 몇 가지 방법을 사용하여

  1. 웹 서버에서 리소스 가져 오기 (일반적으로 HTML 문서)
  2. 해당 리소스를 읽고 다음과 같이 작업하십시오.
    1. DOM / 트리 구조 및 탐색 가능하게 만들기
    2. SAS와 같은 것을 사용하여 토큰 문서로 구문 분석하십시오.

트리와 토큰 파싱 모두 장점이 있지만 일반적 으로 트리가 훨씬 간단합니다. 그렇게하겠습니다. request-promise를 확인하십시오 . 작동 방식은 다음과 같습니다.

const rp = require('request-promise');
const cheerio = require('cheerio'); // Basically jQuery for node.js 

const options = {
    uri: 'http://www.google.com',
    transform: function (body) {
        return cheerio.load(body);
    }
};

rp(options)
    .then(function ($) {
        // Process html like you would with jQuery... 
    })
    .catch(function (err) {
        // Crawling failed or Cheerio 

이것은 본질적으로 경량 서버 측 jQuery-esque 라이브러리 인 cheerio사용 하고 있습니다 (창 객체 또는 jsdom이 필요하지 않음).

promise를 사용하고 있기 때문에이를 비동기 함수로 작성할 수도 있습니다. 동기식으로 보이지만 ES7과 비동기식입니다.

async function parseDocument() {
    let $;
    try {
      $ = await rp(options);
    } catch (err) { console.error(err); }

    console.log( $('title').text() ); // prints just the text in the <title>
}

It is my easy to use general purpose scrapper https://github.com/harish2704/html-scrapper written for Node.JS It can extract information based on predefined schemas. A schema defnition includes a css selector and a data extraction function. It currently using cheerio for dom parsing..


check out https://github.com/rc0x03/node-promise-parser

Fast: uses libxml C bindings
Lightweight: no dependencies like jQuery, cheerio, or jsdom
Clean: promise based interface- no more nested callbacks
Flexible: supports both CSS and XPath selectors

I see most answers the right path with cheerio and so forth, however once you get to the point where you need to parse and execute JavaScript (ala SPA's and more), then I'd check out https://github.com/joelgriffith/navalia (I'm the author). Navalia is built to support scraping in a headless-browser context, and it's pretty quick. Thanks!

참고URL : https://stackoverflow.com/questions/5211486/scrape-web-pages-in-real-time-with-node-js

반응형