使用Node.js实时抓取网页

Avi*_*hai 65 javascript jquery screen-scraping node.js web-scraping

使用Node.js刮取网站内容有什么好处.我想构建非常非常快的东西,可以执行kayak.com风格的搜索,其中一个查询被分派到几个不同的站点,结果被删除,并在它们可用时返回给客户端.

我们假设这个脚本应该只提供JSON格式的结果,我们可以直接在浏览器或其他Web应用程序中处理它们.

一些起点:

使用node.js和jquery来抓取网站

有人有什么想法吗?

Avi*_*hai 24

Node.io似乎拿走了蛋糕:-)

  • 作为作者我可以担保node.io;) (15认同)
  • Node.io不再维护.它已经死了,原来的域名被卖掉了.这个答案不是最新的. (3认同)

Yev*_*niy 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]]);
});
Run Code Online (Sandbox Code Playgroud)

这里,远程执行抓取,只有在结果准备就绪时才会向您的代码发出回调(还有一个选项可以在结果可用时收集).

您可以在https://github.com/emirkin/bobik_javascript_sdk下载Bobik客户端代理SDK