Node.js 爬取安居客-上海, 150-200W之间的房源信息


初学Node.js,受《实验楼》启发,写了一个小Demo,功能很简单,主要用来爬取安居客-上海,150-200W之间的房源信息,并将所有结果导出到Excel中去。以下附上源码:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var http = require('https'),
cheerio = require('cheerio'),
xlsx = require('node-xlsx');

var baseUrl = 'https://shanghai.anjuke.com/sale/';
var m = 'm7';

// 设置只爬取前10页的信息
for (var i = 1; i <= 10; i++) {
startRequest(m, i);
}

var dataArr = [];
var data = [
// Excel表头信息
[
'所在区',
'房型',
'价格',
'大小',
'地址',
'安居客网址链接',
]
];

function startRequest(m, p) {
// 安居客二手房信息第一页:https://shanghai.anjuke.com/sale/m7-o5-p1/
var url = baseUrl + m + '-o5-p' + p + '/';
http.get(url, function (res) {
var html = '';
res.setEncoding('utf-8');

res.on('data', function (chunk) {
html += chunk;
});

res.on('end', function () {
var $ = cheerio.load(html);

$('.houselist-mod-new .list-item').each(function () {
var item = [
$('.house-details .comm-address', this).attr('title').split('-')[0].trim().split("  ")[1],
$('.house-details .details-item', this).eq(0).children().first().text(),
$('.pro-price .price-det strong', this).text(),
$('.house-details .details-item', this).eq(0).children().eq(2).text(),
$('.house-details .comm-address', this).attr('title'),
$('.house-details .house-title a', this).attr('href'),
];

data.push(item);
})

// 导出到Excel表格
function exportExcel() {
dataArr = [{
data: data,
name: 'sheet'
}];

var buffer = xlsx.build(dataArr);
fs.writeFile('anjuke.xlsx', buffer, function (err) {
if (err) {
throw err;
}
console.log(`write page${p} to excel success!`);
});
}
exportExcel();
});
}).on('error', function (err) {
console.error(err);
});
}