我目前正在尝试编写一个可以获得所有' 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);
}
})
答案 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部分。祝你好运!