我正在尝试网页抓取,因为我可以看到很多潜力可以用它来做有趣的事情。我花了几个小时研究我需要什么,我决定使用带有“request”和“cheerio”模块的 node.js 来执行抓取。
所以对于第一个项目,我想我会尝试从这个随机句子生成器站点获取一个随机句子:http ://watchout4snakes.com/wo4snakes/Random/RandomSentence
标记看起来相对简单,这是我感兴趣的一点:
<div class="resultBox">
<table class="centeredResult">
<tbody><tr>
<td>
<span id="result">An amateur regret slights the lust outside his contentious century.</span>
</td>
</tr>
</tbody></table>
</div>
所以我想要的位是跨度(显然在检查实际页面时会有所不同),我编写了以下 Javascript 文件并在节点中运行它:
var request = require("./node_modules/request/");
cheerio = require('./node_modules/cheerio/');
request('http://watchout4snakes.com/wo4snakes/Random/RandomSentence', function(err, resp, body){
if(!err && resp.statusCode == 200){
console.log("connected...\n");
var $ = cheerio.load(body);
console.log($('#result').html());
}
else console.log("Failed To Connect...");
});
我收到通知,所以我做了一些检查并确定我已经正确地抓取了页面的数据。所以现在我要做的就是选择#result
ID 字段中的文本。但是,我只是给了一个空白空间,事实上,如果我让cheerio 模块打印该区域的实际标记,我会得到一个<span ID="result"></span>
没有随机句子的内部。
我最初的猜测是,在随机句子脚本完成运行之前,节点正在抓取标记。但我不知道诊断发生了什么的方法,所以有人知道吗?