【问题标题】:How to most efficiently parse a web page using Node.js如何使用 Node.js 最有效地解析网页
【发布时间】:2017-03-14 03:51:25
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

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

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

    我写了一篇关于将 Cheerio 与 Request 结合使用的博客文章:Quick and Dirty Screen Scraping with 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'));
      });
    });
    

    【讨论】:

    • 我有一个问题要问你,Richardson 我真的希望 PhantomJS 可以实现我正在考虑的这一点,那么是否可以与不同域的站点进行交互,例如登录并发布一些线程(甚至例如在论坛上)。我希望看到这样的东西(C# 示例):stackoverflow.com/questions/14000185/…
    • @jp-richardson 这个答案还有效吗?
    • @UladzimirHavenchyk 是的,这些仍然是我的首选方法。
    • 将cheerio 与phantomjs+ca​​sperjs 一起使用怎么样?然后你会得到一个更快的 jquery(因为你只需要抓取,而不是改变 dom)和浏览器端的 javascript!还是一直嵌入 jquery 会更好?
    【解决方案2】:

    你可以试试PhantomJS。这是用于屏幕抓取的documentation

    【讨论】:

    • 快吗?我认为 web-kit 加载系统太重了。
    • 恐怕我自己没用过,不好意思。
    • PhantomJS 比较慢,相对来说就是这样。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-12-05
        • 2016-01-15
        • 2011-01-11
        • 1970-01-01
        • 2011-11-14
        • 1970-01-01
        • 2015-06-30
        相关资源
        最近更新 更多