我想从html元标记中提取一些元数据。获取的html中存在以下元标记。
<meta property="og:type" content="offer"/>
<meta property="og:title" content='خانه ذرت با کورن داگ لذیذ و خوشمزه در تهران' />
我编写了以下示例代码,以便从元标记中获取 og:type 和 og:title 属性的内容:
var request = require('request');
var cheerio = require('cheerio');
var a='http://someurl/';
getDealInfo(a);
function getDealInfo(url){
var options = {
url: encodeURI(url),
headers: {
'Accept' : '*/*',
'Cache-Control':'no-cache',
}
};
request(options, function(error, response, html){
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
var title = $('meta[property="og:title"]').attr('content');
console.log('title: ' + title);
var type = $('meta[property="og:type"]').attr('content');
console.log('type: ' + type);
}else console.log('Error accessing Deal:' + response.statusCode + '\n'+error);
});
}
og: 正确内容 og:title 未定义,但两个属性都是出现在获取的HTML中。
有人可以帮我弄清楚为什么我无法获得 og:title 属性内容吗?
答案 0 :(得分:0)
我注意到html
响应没有元og:title
您可以使用以下方式查看:
request(options, function(error, response, html){
fs.writeFile('./index.html', html)
})
但您可以使用needle
https://www.npmjs.com/package/needle包代替request
var needle = require('needle')
var results = []
needle.get(encodeURI(url), function(err, res) {
if (err) throw err
var $ = cheerio.load(res.body)
var title = $('meta[property="og:title"]').attr('content')
results.push({
title: title
})
fs.writeFile('./data.json', JSON.stringify(results))
})
输出data.json
内容为og:title
的文件:
[
{
"title": "خانه ذرت با کورن داگ لذیذ و خوشمزه در تهران"
}
]