nodejs + request + cheerio 抓取页面指定的信息

来源:互联网 发布:手机cpu监控软件 编辑:程序博客网 时间:2024/05/22 02:27

项目是建立在在express 框架下   express可参考 http://www.expressjs.com.cn/starter/hello-world.html

1.引入cheerio模块  npm install --save cheerio

2. 引入iconv-lite模块 中文转码用 npm install --save iconv-lite

var express = require('express');
const cheerio = require('cheerio');
const request = require('request');
const iconv = require('iconv-lite');

var router = express.Router();

//采集地址:https://detail.tmall.com/item.htm?id=525432847421  获取 商品和规格信息

router.post('/addUrl', function(req, res, next) {

  //res.send('respond with a resource');
    var param = req.body;//    req.query || req.params get提交获取参数 ;  req.body post提交的参数
    var url = param.goods_url;
    var req = request({url:url,encoding:null}, function(error, response, body) {
        if (!error && response.statusCode == 200) {
            var buf =  iconv.decode(body, 'gb2312');//获取内容进行转码
            //console.log(response) // 打印页面
            $ = cheerio.load(buf);
//            $('.tm-clear .tb-property').remove();
//            $('.tm-clear .tb-gallery').remove();    //删除元素
            var script = $('#J_FrmBid').next().next().next();    //同级下一个元素
//            var script_arr = $('.tm-clear>script');//获取子标签<script>
//            console.log(script);
            var _html = script.html();
            var reg=/\{\"api\"[\s\S]*\"valTimeLeft\"\:[0-9]*\}/g;    //正则匹配{"api": 下面的内容到 "valTimeLeft":XXX} 结束;
            var html = _html.match(reg);

            var json_obj = JSON.parse(html);        //字符串转换为json格式

            console.log(json_obj.itemDO);        //打印商品信息

            res.json({
                code:'1',
                msg: '操作成功'
            });
        }

    });
//res.render('goods/result',data);
})

module.exports = router;

0 0