因爲一些緣由,咱們想要獲取某個網站的數據。咱們能夠經過nodejs爬蟲拿到咱們但願的數據。要完成一個爬蟲,主要的步驟分爲:javascript
爬蟲,最重要的步驟就是如何把想要的頁面抓取回來。而且可以兼顧時間效率,可以併發的爬取多個頁面。想要獲取目標內容,須要咱們分析頁面結構。html
一、使用nodejs的request模塊,獲取目標頁面的html代碼。java
二、使用cheerio模塊對html模塊作處理,拿到須要的數據。node
獲取到有價值的數據後,爲了方便咱們的使用能夠把數據保存下。能夠轉換成json文件或者直接存入數據庫。jquery
一、初始化一個項目:ajax
$ npm init複製代碼
二、安裝依賴模塊:數據庫
$ npm install express request cheerio --save複製代碼
express用來搭建node服務;express
request相似於ajax的方式獲取一個url裏面的html代碼;npm
cheerio相似於jquery那樣對所獲取的html代碼進行處理。json
三、根目錄建立一個spider.js
var express = require('express'),
app = express(),
request = require('request'),
cheerio = require('cheerio'),
fs = require('fs');
var fetchData = [];
function fetchBrand(){
request('http://waimai.baidu.com/waimai/shop/1434741117', function(err, res, body) {
if (err || res.statusCode != 200) {
console.log(err);
console.log('爬取失敗');
return false;
}
var $ = cheerio.load(body, { decodeEntities: false });//解決了亂碼的問題
var curBrands = $('.list-wrap');
for(var i = 0;i < curBrands.length; i++){
var obj = {
name: curBrands.eq(i).find('.list-status .title').text(),
sub: []
}
fetchData.push(obj);
var curSeries = curBrands.eq(i).find('.list-item');
for (var j = 0;j < curSeries.length; j++) {
var obj = {
imgpath:curSeries.eq(j).find('.bg-img').attr('style').substring(curSeries.eq(j).find('.bg-img').attr('style').indexOf('http'), curSeries.eq(j).find('.bg-img').attr('style').indexOf(')')),
name: curSeries.eq(j).find('h3').text(),
recommend: curSeries.eq(j).find('.divider').prev().text(),
sale: curSeries.eq(j).find('.divider').next().text(),
stock: curSeries.eq(j).find('.stock-count').text(),
saPrice: curSeries.eq(j).find('span strong').text(),
orPrice: curSeries.eq(j).find('del strong').text()
}
fetchData[fetchData.length - 1].sub.push(obj);
}
}
var t = JSON.stringify(fetchData);
fs.writeFileSync('baiduData.json', t);
})
}
fetchBrand();複製代碼
四、運行spider.js文件
$ node spider.js複製代碼
控制檯會輸出抓取成功。這個時候你會發現文件夾裏多了一個名爲baiduData.json的json文件。