三篇文档学会使用casperjs制作爬虫

首先要明白什么是爬虫,爬虫听起来很强大,其实就是自动请求获取数据处理数据的一个工具。
明白了什么是爬虫在看看什么是casperjs,casperj是一个运行在python环境中的一个框架,是一个基于 PhantomJs 的工具,其比起 PhantomJs 可以更加方便的进行 navigation。(简单点说就是一个无界面的浏览器)
如何使用和安装:https://www.jianshu.com/p/46b9d255cecb
api文档:http://docs.casperjs.org/en/latest/modules/casper.html#eachthen
看完这两个已经会玩了,我是用来抓截图以及数据,个人不是很喜欢这个东西但是能结合jquery使用是很多人想要的。j
下面是我写的例子:就抓我自己的博客吧
首先要有环境:
1 要先安装的有 nodejs 查看版本 node -v
2.phantom解压 添加环境变量 路径/bin 查看版本 phantom –version
再去phthon官网下载phthon安装 最后 npm install -g casperjs
然后分析网页 :这里写图片描述
按f12 点左上角再点 标题:

这里写图片描述
得到class 然后原网页右键查看源码
这里写图片描述
然后ctrl+f全局搜索刚刚的class
这里写图片描述
就得到
链接:article-item-box>h4>a
标题也在这个a里面;
建立工程:
这里写图片描述
哎哟我去,单词写错了,算了就将就着看吧,反正没什么影响不是。
好了分析好了写代码;

phantom.outputEncoding="utf-8";
//创建
var casper = require('casper').create({
    pageSettings: {
        loadImages: true, // flase不加载图片,减少请求
    },
    clientScripts: ["jquery.1.8.js"]//客户端默认语言 这个一定是要本地的不能远程具体为什么我也不知道反正就是这么用的
});
casper.options.waitTimeout =20000; //设置访问超时
casper.options.clientScripts = ["jquery.1.8.js"];//客户端默认语言和上面一样这里可以不写
var fs = require('fs');//用于输出文件
casper.start();
casper.viewport(1524, 768);
var captureSavePath = 'C:/bill/';
var url = 'https://blog.csdn.net/qq_35189120';//我的csdn博客
casper.then(function () {
    this.open(url).then(function () {
        //不用官方的日志是因为里面太多不知道干嘛的反正我看不懂不如自己提示。
        console.log("start");
        //在evaluate内无法console的因为这类似一个 远程执行相当于在页面中执行代码而不是在我们的程序中
        //step 1 遍历全部url
            urlArr=this.evaluate(function () {
                var itemUrlArr=new Array();
                //通过选择器遍历
                $(".article-item-box>h4>a").each(function (index,ele) {
                    var paper={};//把文章看成对象
                    //为甚要用这么奇诡的命名 为了避免和上面的url冲突  js会变量提升,在es6中可以使用let声明但是这个不支持
                    var CPurl=$(ele).attr("href");//获取url
                    var titel=$(ele).html();
                       //使用正则取出标题。 不好意思正则比较菜 前面两个去空格,后面一个去换行符  最后一个去掉<span></span>标签
                    titel=titel
                        .replace(/(^\s*)|(\s*$)/g, "")
                        .replace(/ /g,"")
                        .replace(/[\r\n]/g, "")
                        .replace(/^<.*>/g,"");
                    paper.url=CPurl;
                    paper.title=titel;
                    itemUrlArr.push(paper);
                });

                return itemUrlArr;
            });
            //到这里已经获取到全部的url和标题了
            console.log(urlArr[0].url);
        //循环数组去打开对应界面并且截图
             var result=JSON.stringify(urlArr);
        this.eachThen(urlArr,function (response) {
            //当前对象 就是上面的paper
            var paperE=response.data;
            var cUrl=paperE.url;
            console.log("showurl:"+cUrl);
            //打开对应的页面
            this.open(cUrl).then(function() {
                //等待返回真执行回调
                   this.waitFor(function () {
                       //显示表单加载了
                       return this.evaluate(function() {
                           return $('.blog-content-box').size() > 0;
                       });
                   },function(){
                       console.log("load success");
                        //获取边框范围
                      var contentBillBounds=this.getElementBounds("div[class='blog-content-box']");
                      //截图
                       this.capture(captureSavePath+'/'+ paperE.title+'/'+'img.jpg' , contentBillBounds);
                       //输出数据
          fs.write(captureSavePath+'/'+ paperE.title+'/' +'data.json',result);


                   })


            });
        })
    })
});
casper.run();//运行

然在windows cmd运行
这里写图片描述
这里写图片描述
去定义的文件夹看看 。就是我的三篇文章 然后里面是对应的截图
这里写图片描述
这里写图片描述

要想全自动只要配合bat等其他定时操作就可

猜你喜欢

转载自blog.csdn.net/qq_35189120/article/details/81661340