Ответ 1
Node.io, кажется, принимает торт: -)
Какая польза для очистки содержимого веб-сайта с помощью Node.js. Я хотел бы построить что-то очень и очень быстрое, чтобы выполнить поиск в стиле kayak.com, где один запрос отправляется нескольким различным сайты, результаты соскабливаются и возвращаются клиенту по мере их появления.
Предположим, что этот script должен просто предоставить результаты в формате 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 в https://github.com/emirkin/bobik_javascript_sdk
Я сам занимался исследованиями, и https://npmjs.org/package/wscraper может похвастаться
агент веб-скребка, основанный на cheerio.js, быстрый, гибкий и постный реализация ядра jQuery; построенный на основе request.js; вдохновлен HTTP-agent.js
Очень низкое использование (в соответствии с npmjs.org), но стоит поискать для всех заинтересованных сторон.
Вам не всегда нужно jQuery. Если вы играете с DOM, возвращенным из jsdom, например, вы можете легко взять то, что вам нужно (также учитывая, что вам не нужно беспокоиться о проблемах с xbrowser.) См.: https://gist.github.com/1335009, что совсем не отвлекает от node.io, просто говоря, что вы можете сделать это самостоятельно в зависимости от...
Обычно, когда вы очищаете, вы хотите использовать какой-либо метод для
И дерево, и маркер-парсинг имеют преимущества, но дерево обычно значительно проще. Мы сделаем это. Проверьте 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>
}
Это мой простой в использовании универсальный скребок https://github.com/harish2704/html-scrapper, написанный для Node.JS Он может извлекать информацию на основе предопределенных схем. Выделение схемы включает селектор css и функцию извлечения данных. В настоящее время он использует cheerio для синтаксического анализа дома.
проверить 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
Я вижу, что большинство ответов на правильный путь с помощью cheerio
и т.д., однако, как только вы дойдете до точки, где вам нужно проанализировать и выполнить JavaScript (ala SPA и другие), я бы проверил https://github.com/joelgriffith/navalia (я автор). Navalia создан для поддержки соскабливания в контексте безгласного браузера, и это довольно быстро. Спасибо!