用node爬安居客的深圳宝安区小区的数据,仅供学习。
首先你要有node环境,然后安装cheerio和express,可以大概看一下它们两个的作用。
注意点:url只能用http的地址不能用https,当然了,那个地址是https的,你可以不写这个s。
一步一步来的话,就是先写死一个固定的url,能爬下来再想动态切换url,没问题了再通过express设置一个地址显示在页面上,如下代码访问地址为(127.0.0.1:8020)。
代码有拷贝别人的,也有自己改进的,所以命名啥的,,我不想管了。。
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
// 加载http模块 var http = require('http'); // Cheerio 是一个Node.js的库, 它可以从html的片断中构建DOM结构,然后提供像jquery一样的css选择器查询 var cheerio = require('cheerio'); var express = require('express'); var app = express(); var default_page = 1; // 定义网络爬虫的目标地址:深圳安居客的主页 var url = 'http://shenzhen.anjuke.com/community/baoan/p' + default_page + '/'; function getInfo(url) { http.get(url, function (res) { var html = ''; // 获取页面数据 res.on('data', function (data) { html += data; }); // 数据获取结束 res.on('end', function () { // 通过过滤页面信息获取实际需求的轮播图信息 var slideListData = filterSlideList(html); // 打印信息 printInfo(slideListData); console.log('当前页扫描结束!'); }); }).on('error', function () { console.log('获取数据出错!'); }); } getInfo(url) var count = 0; var slideListData = []; var arrayNum = 0; /* 过滤页面信息 */ function filterSlideList(html) { if (html) { // 沿用JQuery风格,定义$ var $ = cheerio.load(html); // 根据id获取列表信息 var slideList = $('#list-content'); // 数据 arrayNum = $('#list-content .li-itemmod').length; /* 列表信息遍历 */ if (slideList && arrayNum) { // 页面有需要的内容 slideList.find('.li-itemmod').each(function (item) { var pic = $(this); var pic_name = pic.find('.li-info h3 a').text().trim(); slideListData.push(pic_name) count++; done(); }); } else { // 页面没有需要的内容,停止 console.log(slideListData) console.log('没有啦') let finallySlideListData = [...new Set(slideListData)] // 数组去重 app.get('/', function (req, res) { res.send(finallySlideListData); }).listen('8020', '127.0.0.1'); return false } return slideListData; } else { console.log('无数据传入!' + default_page); } } /* 打印信息 */ function printInfo(slideListData) { // 计数 // 遍历信息列表 if (slideListData && slideListData.length > 0) { slideListData.forEach(function (item) { // console.log(item); // console.log('\n'); }); } } function done() { if (count == arrayNum) { console.log('------------------本页( ' + default_page + ' )结束----------'); default_page = default_page + 1 count = 0 arrayNum = 0 let newUrl = 'http://shenzhen.anjuke.com/community/baoan/p' + default_page + '/'; console.log(newUrl) getInfo(newUrl) } } |