NodeJS - Читать HTML-теги заголовков - PullRequest
0 голосов
/ 08 мая 2019

Я хочу очистить страницу HTML в моем приложении nodejs и сформировать список тегов заголовка.Например:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <script src="script.src"></script>
</head>
<body>
    ...
</body>
</html>

Желаемый результат:

['<meta charset="UTF-8">','<meta name="viewport" content="width=device-width, initial-scale=1.0">','<title>Document</title>', ...etc]

Но я немного застрял, поскольку метатеги не "закрываются", поэтому для этого нужно больше, чем просто регулярное выражение и разбиение.Я хотел использовать DOMParser, но я нахожусь в среде узла.Я попытался использовать пакет xmldom npm, но он только что возвратил список символов новой строки (\r\n).

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Один из вариантов - использовать Cheerio для анализа HTML-кода и извлечения необходимой информации из каждого элемента:

const cheerio = require('cheerio');
const htmlStr = `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <script src="script.src"></script>
</head>
<body>
    ...
</body>
</html>`;
const $ = cheerio.load(htmlStr);
const headTags = [];
$('head > *').each((_, elm) => {
  headTags.push({ name: elm.name, attribs: elm.attribs, text: $(elm).text() });
});
console.log(headTags);

Выход:

[ { name: 'meta', attribs: { charset: 'UTF-8' }, text: '' },
  { name: 'meta',
    attribs:
     { name: 'viewport',
       content: 'width=device-width, initial-scale=1.0' },
    text: '' },
  { name: 'title', attribs: {}, text: 'Document' },
  { name: 'link',
    attribs: { rel: 'stylesheet', href: 'style.css' },
    text: '' },
  { name: 'link',
    attribs:
     { rel: 'shortcut icon',
       href: 'favicon.ico',
       type: 'image/x-icon' },
    text: '' },
  { name: 'script', attribs: { src: 'script.src' }, text: '' } ]
0 голосов
/ 08 мая 2019

используйте запрос npm для запроса вашей страницы, а затем, после получения ответа, используйте cheerio npm для анализа и получения любых данных из необработанных данных.

Примечание: cheerio имеет такой синтаксис, как jQuery

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

app.get('/scrap',(req,res)=>{

request('---your website url to scrap here ---', function (error, response, body) {    
       var $ = cheerio.load(body.toString())
       let headContents=$('head').children().toString();
       console.log('headContents',headContents)
  });

});
...