使用node.js爬取静态页面

使用node.js爬取静态页面

爬虫就是向目标url发送请求,然后把服务器的相应解析为我们需要的格式。
下面爬取整个页面,也可以根据个人需求爬取自己需要的信息。

准备工作

bash
1
2
3
4
# request库用于发送请求
cnpm install request --save
# cheerio是jQuery核心代码, 用于操作请求返回的DOM
cnpm install cheerio --save

编写代码

spider.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const request = require('request');
const cheerio = require('cheerio');
const readline = require('readline');
const fs = require('fs');

let url;
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});

console.log('请输入要爬取的url:');

rl.question('url:', function(res) {
url = res;
rl.close();
});

rl.on('close', function() {
console.log('正在爬取...');
console.time('爬取耗时');
request(url, (err, res) => {
if (err) {
console.log('创建输出目录错误' + '' + err);
} else {
console.log('爬取成功!');
console.timeEnd('爬取耗时');
let $ = cheerio.load(res.body);
let DOM = $('html').prop('outerHTML');
let now = new Date().getTime();
console.log('正在写入文件...');
console.time('写入耗时');
fs.writeFile('./output/output_'+ now + '.html', DOM, function(err) {
if (err !== null) {
console.log('写入失败,错误信息:' + err);
} else {
console.log('写入成功!');
console.timeEnd('写入耗时');
console.log('文件路径:' + __dirname + '/output/output_' + now + '.html');
}
});
}
});
});

运行

bash
1
node spider.js

页面中引用的静态资源文件还没有爬。
等等再写。

评论