如何使用Node.js最有效地解析网页

时间:2012-09-13 10:03:40

标签: javascript node.js

我需要解析一个简单的网页并从html获取数据,例如“src”,“data-attr”等。如何使用Node.js最有效地完成这项工作?如果有帮助,我使用的是Node.js 0.8.x。

P.S。这是我正在解析的site。我想获得当前曲目的列表,并制作我自己的html5应用程序,以便在移动设备上进行收听。

4 个答案:

答案 0 :(得分:58)

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

您应该使用CheerioRequest一起使用的内容。这对于大多数网页来说已经足够了。

我写了一篇关于使用Cheerio请求的博客文章:Quick and Dirty Screen Scraping with Node.js但是,如果它是JavaScript密集型,请将PhantomJS与CasperJS结合使用。

希望这有帮助。

使用请求和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'));
  });
});

答案 1 :(得分:4)

您可以尝试PhantomJS。这是使用它进行屏幕抓取的documentation

答案 2 :(得分:3)

我同意@JP Richardson的说法,Cheerio最适合刮掉非JS重型网站。 对于JS重型站点,请使用Casper。它提供了Phantom和Promises风格API的强大抽象。他们回顾了如何在他们的文档中抓取:http://docs.casperjs.org/en/latest/quickstart.html

答案 3 :(得分:0)

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