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

时间:2015-11-09 20:37:18

标签: node.js request cheerio

我目前正在尝试编写一个可以获得所有' p'使用node.js

在facebook帖子中的div内标记

页面上的每个帖子都在div中,所有这些帖子都有这个类:.text_exposed_root

有时候有多个' 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,但他们都只返回一个空白的回复。我猜我需要抓住所有的' p'该div中的标签并转换为字符串可能吗?

提前致谢。

编辑:

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

1 个答案:

答案 0 :(得分:2)

首先,您需要根据您的请求设置一些标头。如果没有它们,Facebook将回复并且不支持浏览器&#34;页。那是你的第一个问题。

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部分。祝你好运!