Подтвердить что ты не робот

Очистите веб-страницы в режиме реального времени с помощью Node.js

Какая польза для очистки содержимого веб-сайта с помощью Node.js. Я хотел бы построить что-то очень и очень быстрое, чтобы выполнить поиск в стиле kayak.com, где один запрос отправляется нескольким различным сайты, результаты соскабливаются и возвращаются клиенту по мере их появления.

Предположим, что этот script должен просто предоставить результаты в формате JSON, и мы можем обрабатывать их либо непосредственно в браузере, либо в другом веб-приложении.

Несколько отправных точек:

Использование Node.js и jquery для очистки сайтов

У кого-нибудь есть идеи?

4b9b3361

Ответ 1

Node.io, кажется, принимает торт: -)

Ответ 2

Все вышеупомянутые решения предполагают использование скребка локально. Это означает, что вы будете сильно ограничены в производительности (из-за их запуска в последовательности или в ограниченном наборе потоков). Лучший подход, 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 в https://github.com/emirkin/bobik_javascript_sdk

Ответ 3

Я сам занимался исследованиями, и https://npmjs.org/package/wscraper может похвастаться

агент веб-скребка, основанный на cheerio.js, быстрый, гибкий и постный реализация ядра jQuery; построенный на основе request.js; вдохновлен HTTP-agent.js

Очень низкое использование (в соответствии с npmjs.org), но стоит поискать для всех заинтересованных сторон.

Ответ 4

Вам не всегда нужно jQuery. Если вы играете с DOM, возвращенным из jsdom, например, вы можете легко взять то, что вам нужно (также учитывая, что вам не нужно беспокоиться о проблемах с xbrowser.) См.: https://gist.github.com/1335009, что совсем не отвлекает от node.io, просто говоря, что вы можете сделать это самостоятельно в зависимости от...

Ответ 5

Новый способ использования ES7/promises

Обычно, когда вы очищаете, вы хотите использовать какой-либо метод для

  • Получить ресурс на веб-сервере (обычно в html-документе)
  • Прочитайте этот ресурс и работайте с ним как
    • Структура DOM/дерева и сделать ее доступной.
    • проанализируйте его как токен-документ с чем-то вроде 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 

Это использует cheerio, который по существу является легкой библиотекой jQuery-esque на стороне сервера (которая не нуждается в объекте окна, или jsdom).

Поскольку вы используете promises, вы также можете записать это в асинхронной функции. Он будет выглядеть синхронно, но он будет асинхронным с 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>
}

Ответ 6

Это мой простой в использовании универсальный скребок https://github.com/harish2704/html-scrapper, написанный для Node.JS Он может извлекать информацию на основе предопределенных схем. Выделение схемы включает селектор css и функцию извлечения данных. В настоящее время он использует cheerio для синтаксического анализа дома.

Ответ 7

проверить 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

Ответ 8

Я вижу, что большинство ответов на правильный путь с помощью cheerio и т.д., однако, как только вы дойдете до точки, где вам нужно проанализировать и выполнить JavaScript (ala SPA и другие), я бы проверил https://github.com/joelgriffith/navalia (я автор). Navalia создан для поддержки соскабливания в контексте безгласного браузера, и это довольно быстро. Спасибо!