通过交互式网页爬取,抓取天猫商品价格

通过交互式网页爬取,抓取天猫商品价格。
方式:模拟点击颜色分类,然后读取定价
参考(1):http://www.cnblogs.com/xinzhyu/p/4214669.html

主要利用CasperJS工具包:http://casperjs.org/

其中最重要的是通过css3选择器,来选取需要操作的网页DOM元素,css3选择器参见:http://www.w3cplus.com/css3/basic-selectors

查看元素的小技巧:
在浏览器上,相应元素处单击右键,选择“审查元素”,可以看到相应元素的html代码。

选择器测试小技巧:
IE或firefox,F12打开开发者窗口,在搜索栏中输入选择器,可检测选择器效果。

IE:
通过交互式网页爬取,抓取天猫商品价格_第1张图片

Firefox:
通过交互式网页爬取,抓取天猫商品价格_第2张图片

下面代码使用casperjs tm.js运行:

var casper = require('casper').create({ 
    clientScripts: ["jquery-1.8.0.js"], 
    verbose: false, 
    logLevel: 'debug', 
    pageSettings: { 
        loadImages: false, // The WebPage instance used by Casper will 
        loadPlugins: false // use these settings 
    } 
});
phantom.outputEncoding = "gbk";//解决乱码问题 


//获取需要采集的url列表 
casper.start('http://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.5.DOIb7J&id=15770542928&skuId=77000178467&cat_id=2&rn=834703bc8f2c7b8023fafe89107e079c&user_id=291487571&is_b=1', function() { 
    console.log(this.getCurrentUrl());
    //casper.GetDetailUrl(url); 
}); 

//处理当前页面的所有sku价格与信息 
casper.then(function getPic() { 
    product = casper.evaluate(function getProductFromPage() { 
        return $('ul[class*="tb-img"]').children().size();  
    }); 

    console.log(product); 

    var str = ''
    for (var i = 1; i <= product; i++) { 
        str += casper.getPrice(i) + "|"; 
    } 

    var item = new Object(); 
    item.price = str; 
    item.numiid = this.getCurrentUrl(); 

    console.log(str);
});

//获取商品的价格 
casper.getPrice = function(index) { 
    var dd = casper.clickByImg(index); 
    if (dd == -1) { 
        return ''; 
    } 

    productPrice = casper.evaluate(function getPriceFromPage() { 
        return $('.tm-price').first().text().trim(); 
    }); 

    return (dd + "_" + productPrice);   
}; 

//点击小图及获取此商品的data-value 
casper.clickByImg = function(index) { 
    this.click('ul.tb-img>li:nth-child(' + index + ') a');
    return index;
};

casper.run(); 

以上代码参考(1)修改,仅实现抓取一个给定链接的商品价格,并在控制台输出。若要通过node.js来对链接列表中的商品进行多线程抓取,并且把抓到的价格通过json post到服务器,可以参考原文的方法。

你可能感兴趣的:(爬虫)