使用 node.js 从 div 中检索文本

Retrieving text from within div using node.js

我目前正在尝试编写一个抓取工具,它将使用 node.js[=14= 从 facebook post 中的 div 中获取所有 'p' 标签]

页面上的每个 post 都位于 div 中,所有 class:.text_exposed_root

有时每个 post 中有多个 'p' 标签,所以理想情况下,如果可能的话,我需要抓取 div 中的所有 html 文本。我正在使用 cheerio 和请求模块,到目前为止我的代码如下:

request(BTTS, function(error, response, body){
    if (!error){
        var $ = cheerio.load(body), 
        post = $(".text_exposed_root p").text();

        console.log(post);
    } else {
        console.log("We’ve encountered an error: " + error);
    }
})

我试过使用 .text .value 和 .html 但它们都只是 return 空白响应。我猜我可能需要获取 div 中的所有 'p' 标签并转换为字符串?

提前致谢。

已编辑:

var url = ('https://www.facebook.com/BothTeamsToScore');

request({url:url, headers: headers}, function(error, response, body){
    if (!error){

        var strippedBody = body.replace(/<!--[\s\S]*?-->/g, "")

        console.log(strippedBody);

        var $ = cheerio.load(strippedBody), 
        post = $(".text_exposed_root p").text();

        console.log(post);
    } else {
        console.log("We’ve encountered an error: " + error);
    }
})

首先,您需要根据您的请求设置一些 headers。没有它们,Facebook 将响应 "unsupported browser" 页面。这是你的第一个问题。

var headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',
   'Content-Type' : 'application/x-www-form-urlencoded'
}

var url = BTTS

request({url:url, headers: headers}, function(error, response, body){
    if (!error){
        var $ = cheerio.load(body.replace(/<!--|-->/g, ''))
        console.log($('.text_exposed_root p').text())
    } else {
        console.log("We’ve encountered an error: " + error);
    }
})

另一件需要注意的事情是,内容来自 html 评论。即

<code class="hidden_elem"><!-- 
... 
    <div class="text_exposed_root">
        <p>text</p>

Cheerio 不会解析评论节点,因此您很可能需要删除 <!----> 并将结果加载回 cheerio 以解析 html 的部分你要的那个。祝你好运!