Node.jsでスクレイピングをする際にcheerioはお勧めできない
cheerio
こんなのを
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>つらぽよ(>_<)...</title>
<script>
<!--
console.log('(;_;)');
// -->
</script>
</head>
<body>
こんにちは(^^)/
</body>
</html>
こうすると
var fs = require('fs');
var cheerio = require('cheerio');
var html = fs.readFileSync('test.html', 'utf8');
var $ = cheerio.load(html);
console.log('cheerio:', $('title').text());
こうなる
cheerio: つらぽよ(>_
<!--
console.log('(;_;)');
// -->
スクリプト内まで引っ張ってきおる。
jsdom + jQuery
こうすると
var env = require('jsdom').env;
var jquery = require('jquery');
var html = fs.readFileSync('test.html', 'utf8');
env(html, function (error, window) {
if (!error) {
var $ = jquery(window);
console.log('jquery:', $('title').text());
}
});
こうなる
jquery: つらぽよ(>_
正しくはないけど、内臓が露出しない。
ちなみに、ブラウザだと
こうすると
$('title').text()
こうなる
"つらぽよ(>_<)..."
ちゃんと取れる(かしこい!