2015-03-15 4 views
3

Я хочу массив ссылок из HTML-строки, хотя только один из следующих тегов:извлекать URL-адреса для js & css-файлов из html? (с использованием Node.js)

  • ссылка HREF = «http://example.com/foo.css»
  • сценарий SRC = «http://example.com/foo.js»

Я хотел бы эти адреса, чтобы я мог поместить их в файл манифеста AppCache. Я использую конструктор манифеста appcache, но он анализирует только статические файлы, которые я обслуживаю локально. Он отлично работает, но он не включает автоматически статические файлы js/css, которые я включаю в свой html.

Я хотел бы иметь возможность анализировать строку html с помощью node.js.

ответ

3

Вы можете использовать cheerio. Это реализация основного jQuery для узла.

Например:

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

request('http://www.stackoverflow.com', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    var $ = cheerio.load(body); 

    var linkHrefs = $('link').map(function(i) { 
     return $(this).attr('href'); 
    }).get(); 
    var scriptSrcs = $('script').map(function(i) { 
     return $(this).attr('src'); 
    }).get(); 


    console.log("links:"); 
    console.log(linkHrefs); 
    console.log("scripts:"); 
    console.log(scriptSrcs); 
    } 
}); 

Выходы:

Victors-MacBook-Pro:a kohl$ node test.js 
links: 
[ '//cdn.sstatic.net/stackoverflow/img/favicon.ico?v=6cd6089ee7f6', 
    '//cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png?v=41f6e13ade69', 
    '/opensearch.xml', 
    '//cdn.sstatic.net/stackoverflow/all.css?v=317033db9646', 
    '/feeds' ] 
scripts: 
[ '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', 
    '//cdn.sstatic.net/Js/stub.en.js?v=e3a448574e16' ] 
+0

Это круто. Мне нужен пакет npm, который тянет такие URL-адреса. Я не уверен, хочу ли я извлечь его из одного файла или из каталога или, возможно, из нефритовых файлов. Я знаю, что мне нужно что-то вроде этого, так что я могу добавить его к результату npm pkg appcachegen, который обрабатывает только локальные файлы (и не читает их для URL-адресов, как показано выше). Комбинация обоих будет делать заметный манифест appcache. – Gavin