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

How to most efficiently parse a web page using Node.js

本文关键字:网页 有效地 何使用 Node js      更新时间:2023-09-26

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

第页。S.这是我正在分析的网站。我想获得一个当前曲目的列表,并制作我自己的html5应用程序,用于在移动设备上收听。

我已经做了很多。如果你正在抓取的网站大量使用JavaScript,你会想使用PhantomJS。请注意,PhantomJS不是Node.js。它是一个完全不同的JavaScript运行时。您可以通过phantomjs节点或节点phantom进行集成,但它们都有点棘手。YMMV。避免任何与jsdom有关的事情。它会让你头疼——这包括Zombie.js.

您应该将Cheerio与Request结合使用。这对于大多数网页来说就足够了。

我写了一篇关于使用Cheerio with Request:Quick and Dirty Screen Scratching 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'));
  });
});

您可以尝试PhantomJS。以下是使用它进行屏幕抓取的文档。

我同意@JP Richardson的观点,Cheerio最适合抓取非JS重的网站。对于JS密集型网站,请使用Casper。它对Phantom和promises风格的API提供了很好的抽象。他们复习了如何在他们的文档中抓取:http://docs.casperjs.org/en/latest/quickstart.html.

如果要使用phantom,请使用节点phantom。我有一个github存储库,如果你想看看的话,可以将它们一起从html生成pdf文件。但我不会选择幻影,因为它比你通常想要的做得更多,而cheerio更快。