使用Node.js刮取网站内容有什么好处。我想构建一些非常非常快的东西,它可以以kayak.com的方式执行搜索,其中一个查询被分派到几个不同的站点,结果被删除,并在它们可用时返回给客户端。 / p>
我们假设这个脚本应该只提供JSON格式的结果,我们可以直接在浏览器或其他Web应用程序中处理它们。
一些起点:
Using node.js and jquery to scrape websites
有人有什么想法吗?
答案 0 :(得分:24)
Node.io似乎拿走了蛋糕: - )
答案 1 :(得分:5)
所有上述解决方案都假设在本地运行刮刀。这意味着您将受到严重的性能限制(由于按顺序或在一组有限的线程中运行它们)。一个更好的方法,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]]);
});
此处,远程执行抓取,只有在结果准备就绪时才会向您的代码发出回调(还有一个选项可以在结果可用时收集)。
下载https://github.com/emirkin/bobik_javascript_sdk答案 2 :(得分:2)
我自己一直在做研究,https://npmjs.org/package/wscraper自称为
基于cheerio.js的网络刮刀代理,快速,灵活,精益 核心jQuery的实现;建立在request.js之上;灵感来自 HTTP的agent.js
使用率非常低(根据npmjs.org),但值得一看有兴趣的人士。
答案 3 :(得分:1)
你并不总是需要jQuery。如果您使用从jsdom返回的DOM,例如,您可以轻松地获取您自己需要的内容(也考虑到您不必担心xbrowser问题。)请参阅:https://gist.github.com/1335009根本没有从node.io中删除,只是说你可以自己做,因为......
答案 4 :(得分:1)
通常当你在拼抢你想要使用某种方法
时树和令牌解析都有优势,但树通常基本上更简单。我们会这样做的。查看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>
}
答案 5 :(得分:0)
我很容易使用为Node.JS编写的通用剪贴簿https://github.com/harish2704/html-scrapper 它可以根据预定义的模式提取信息。 模式定义包括css选择器和数据提取功能。 它目前使用cheerio进行dom解析..
答案 6 :(得分:0)
结帐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
答案 7 :(得分:0)
我看到大多数答案都是cheerio
等正确的路径,但是一旦你到达需要来解析和执行JavaScript(ala SPA等等),那么我看看https://github.com/joelgriffith/navalia(我是作者)。 Navalia旨在支持无头浏览器环境中的抓取,而且速度非常快。谢谢!