node创建一个简单的网页爬虫
安装node就可以了,创建index.js
用到request、fs、cheerio、iconv-lite、node-xlsx
request:发送请求
fs:操作文件
cheerio:node里面的jQuery,操作页面dom
iconv-lite:处理获取数据编码问题
node-xlsx:将数据保存为xlsx文档
文章以房天下的为例。
var request = require('request')
var cheerio = require('cheerio')
var iconv = require('iconv-lite'); //引入模块
var fs = require('fs')
var xlsx = require('node-xlsx')//获取表格
function writeXls(datas,index) {
var buffer = xlsx.build([
{
name:'sheet'+index,
data:datas
}
]);
fs.writeFileSync('test1.xlsx',buffer,{'flag':'w'}); //生成excel
}
var list = []
var datas = [];
//获取房源数据
function getHotMovies(url,index) {
request({url,encoding: null, gzip:true}, function (err,res, body) {
if (!err && res.statusCode == 200) {
var $ = cheerio.load(iconv.decode(body, 'GBK'));
var content = $('.shop_list .tit_shop')
var length = content.length
// console.info(length)
while (length -- ) {
var title = $('.shop_list .tit_shop').eq(length).text()
var xiaoquName = $('.shop_list .add_shop a').eq(length).text().replace(/\s/g,"");
var xiaoquAddr = $('.shop_list .add_shop span').eq(length).text()
var arr = [title,xiaoquName,xiaoquAddr]
datas.push(arr)
title && list.push(`名字:${title}》》》小区名称:${xiaoquName}》》》小区地址:${xiaoquAddr}\r\n`)
}
writeXls(datas,index);
fs.writeFile('test.txt',list,(err)=>{
if (err) throw err;
console.log('文件已被保存',index);
})
} else {
console.info('网页加载失败',err)
}
})
}
//第一页和其他页码路径不一样,需要分开处理
getHotMovies('https://cd.esf.fang.com/integrate',1) //第一页
for (let index = 2; index < 80; index++) {
getHotMovies('https://cd.esf.fang.com/integrate/i3'+index+'/',index)
}
然后运行
node index.js
然后查看test1.xlsx、test.txt文件,就可以看到node爬下来的数据了。