29

我需要解析一个简单的网页并从 html 中获取数据,例如“src”、“data-attr”等。如何使用 Node.js 最有效地做到这一点?如果有帮助,我正在使用 Node.js 0.8.x。

PS这是我正在解析的网站。我想获取当前曲目列表并制作自己的 html5 应用程序以在移动设备上收听。

4

4 回答 4

59

我已经做了很多。如果您正在抓取的网站大量使用 JavaScript,您将需要使用PhantomJS 。请注意,PhantomJS 不是 Node.js。这是一个完全不同的 JavaScript 运行时。您可以通过phantomjs-nodenode-phantom进行集成,但它们都比较老套。YMMV 与那些。避免与 jsdom 有任何关系。它会让你头疼 - 这包括Zombie.js

你应该使用CheerioRequest。这对于大多数网页来说已经足够了。

我写了一篇关于将 Cheerio 与 Request 结合使用的博客文章:使用 Node.js 进行快速而脏的屏幕抓取但是,如果它是 JavaScript 密集型的,请将 PhantomJS 与CasperJS结合使用。

希望这可以帮助。

使用 Request 和 Cheerio 的片段:

var request = require('request')
  , cheerio = require('cheerio');

var searchTerm = 'screen+scraping';
var url = 'http://www.bing.com/search?q=' + searchTerm;

request(url, function(err, resp, body){
  $ = cheerio.load(body);
  links = $('.sb_tlst h3 a'); //use your CSS selector here
  $(links).each(function(i, link){
    console.log($(link).text() + ':\n  ' + $(link).attr('href'));
  });
});
于 2012-09-14T18:30:22.100 回答
4

你可以试试PhantomJS。这是使用它进行屏幕抓取的文档。

于 2012-09-13T10:41:35.900 回答
3

我同意@JP Richardson 的观点,即 Cheerio 最适合抓取非 JS 重的网站。对于 JS-heavy 站点,使用Casper。它提供了对 Phantom 和 Promise 风格的 API 的出色抽象。他们讨论了如何在他们的文档中抓取:http: //docs.casperjs.org/en/latest/quickstart.html

于 2015-03-27T20:09:22.660 回答
0

如果您想使用 phantom,请使用 node-phantom。如果你想看看,我有一个 git hub 存储库,可以将它们一起使用来从 html 生成 pdf 文件。但我不会选择幻影,因为它比你通常想要的要多,而且 Cheerio 更快。

于 2014-06-15T03:23:25.570 回答