使用 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 的部分你要的那个。祝你好运!
我目前正在尝试编写一个抓取工具,它将使用 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 的部分你要的那个。祝你好运!