request cheerio 抓取页面并获取所需数据

有了node后,前端抓取网页数据就不成问题了

一般抓取都是获取页面中指定的数据。

分两种,一种同标签的html 一种是标签的属性值。

我自己写的比较lou ,只是从列表获取详情url,然后读取详情页面。

用cheerio获取有用数据,用fs写到文件内。保存指定的图片。


当然它对于页面用ajax加载的数据是无效的。

request 只能拿到页面的源码。至于获取ajax后的页面代码就需要用phantomjs 了。

现在用的对于大多已经够用了,速度比phantomjs快多了。


需要注意的几点:

1、创建目录

if(!fs.existsSync('pages')){
	fs.mkdirSync('pages')
}
这是判断然后创建文件夹

但对于'/a/b/c'这种的就需要递归了。

用mkdir创建是会报错的,淌有a b 文件夹c是创建失败的。

//创建文件夹目录
//mkdir('a/b/c/d')
function mkdir(s){
    if(!fs.existsSync(s)){
        var a='';
        s.split('/').forEach(function(v){
            //console.log(v);
            create(v);
        })
        function create(p){
            a+=p;
            if(!fs.existsSync(a)){
                fs.mkdirSync(a);
            }
            a+='/'
        }
    }
}

2、cheerio用法

var $=cheerio.load(body)

之后用$来查找标签

$('#gallProd img');

as.eq(i).attr('src').replace('prodTmb','prodPage');

$('.infoProdDet .originalPrice').text()

3、写入文件

fs.appendFile('/pages/info.html',txt,fn)

4、下载图片

下载图片用http,对于https开头的需要写成http

图片保存用fs.writeFile('pages/img/1.jpg',data,'binary',fn)

ar fs=require('fs');
var request=require('request')
var cheerio=require('cheerio');
var path=require('path');
var http=require('http')


if(!fs.existsSync('pages')){
	fs.mkdirSync('pages')
}



var site='https://www.xxxx.com'


function getlist(name,url){
	request(url,function(error,res,body){
		if (!error && res.statusCode == 200) {
	    	//console.log(body);    //返回请求页面的HTML
	    	gethtml(name,body);
	  	}	
	})
}
function gethtml(name,data){
	console.log('-----------------------------------------------\n')
	var $=cheerio.load(data);
	var urls=[]
    var a=$('.prodList a[itemprop="url"]');   
    for(var i=0;i



你可能感兴趣的:(NodeJs)