首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NodeJS -读取Head标签

NodeJS -读取Head标签
EN

Stack Overflow用户
提问于 2019-05-08 08:32:09
回答 2查看 813关注 0票数 0

我想在nodejs应用程序中抓取一个HTML页面,并形成一个head标记列表。例如:

代码语言:javascript
运行
AI代码解释
复制
<!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>

所需输出:

代码语言:javascript
运行
AI代码解释
复制
['<meta charset="UTF-8">','<meta name="viewport" content="width=device-width, initial-scale=1.0">','<title>Document</title>', ...etc]

但是我有点卡住了,因为meta标签没有“关闭”,所以它需要的不仅仅是简单的正则表达式和拆分。我想使用DOMParser,但我在节点环境中。我尝试使用xmldom npm包,但它只返回一个换行符列表(\r\n)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-08 08:57:19

一种选择是使用Cheerio解析HTML,并从每个元素中提取所需的信息:

代码语言:javascript
运行
AI代码解释
复制
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);

输出:

代码语言:javascript
运行
AI代码解释
复制
[ { 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
EN

Stack Overflow用户

发布于 2019-05-08 08:55:02

使用request npm请求您的页面,然后在获得响应之后,使用cheerio npm从原始数据中解析并获取您想要的内容。

注意: cheerio的语法类似于jQuery

代码语言:javascript
运行
AI代码解释
复制
 var request = require('request');
 var cheerio = require('cheerio')

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

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

});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56036607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文