Cheerio:选择meta property时出现问题

3

我想从html meta标签中提取一些元数据。以下meta标签在获取的html中存在。

<meta property="og:type" content="offer"/>
<meta property="og:title" content='خانه ذرت با کورن داگ لذیذ و خوشمزه  در تهران' />

我已经编写了以下示例代码,以获取meta标签中的og:typeog: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:type正确内容,但og:title返回未定义,虽然两个属性都存在于获取的HTML中。
有人可以帮我弄清楚为什么我无法获取og:title属性的内容吗?

嗨Amir,欢迎来到Stack Overflow!你能否编辑一下你的问题,更详细地说明问题所在呢? - Kezz
根据网站所有者的要求,我已经更改了主要的URL。 - Amir
1个回答

4

我注意到 HTML 响应中没有元标签 og:title

您可以通过以下方式查看:

request(options, function(error, response, html){
    fs.writeFile('./index.html', html)
})

但是你可以使用 needle 包替代 request,可以在 https://www.npmjs.com/package/needle 上找到该包。

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))
})

输出包含og:title内容的data.json文件:

[
    {
        "title": "خانه ذرت با کورن داگ لذیذ و خوشمزه  در تهران"
    }
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接