如何使用Node.js最有效地解析网页
How to most efficiently parse a web page using Node.js
我需要解析一个简单的网页并从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更快。
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何使用Node.js最有效地解析网页
- 如何在AngularJS中有效地检查日期是否有效
- 有效地获取两个区间之间的随机整数
- 如何在three.js中有效地使用TraingleStripDrawMode
- 如何有效地创建多维javascript数组
- 如何有效地将Float32Array插入Float32Array
- 如何有效地匹配两个不同 JavaScript 对象上的 id,并将它们合并在一起
- Javascript画布:如何有效地计算两个画布的距离
- 有效地串行化(并从nodejs读取)int数组
- 我怎样才能更有效地获取这个数字
- 我如何创建一个Chrome应用程序,有效地充当信息亭模式下的启动页面
- Javascript函数可以更有效地处理并发异步函数
- 如何更有效地重写
- 如何或如何使用firebase有效地处理错误
- 如何在Angular中有效地检测元素点击
- 有效地从Ruby on Rails中的连接表中绘制值,以便在javascript中使用
- 如何在(javascript)Firefox插件中有效地存储传入数据
- 如何有效地将相同的“道具”传递给每个无状态表示组件
- 如何在运动路径上有效地反转 SVG (SMIL) 动画