存档

文章标签 ‘数据采集’

使用rsync进行文件同步

2017年4月25日 没有评论
  1. rysnc是什么
    1. 这是一个linux平台上通用的文件同步工具,可以在本地目录或本地与服务器之间进行文件同步
    2. 安全:支持自定义端口,支持口令配置
    3. 高效:只传输差异部分,支持压缩传输
    4. 易用:支持通配符,支持exclude来排除特定文件
  2. 安装
    1. 大多数linux服务器默认安装有rsync
    2. 如果没有,简单运行yum -y install rsync就ok了
  3. 简单示例
    1. 同步的前提是两端服务器都安装了rsync
    2. push方式:rsync /localDir/file user@remoteServerAddress:/remoteDir
    3. pull方式:rsync user@remoteServerAddress:/remoteDir/file /localDir
    4. 上述两条命令实际上是通过ssh来通信的,所以如果对端服务器用户配置了密码的话需要输入密码
    5. rsync还支持通过rync协议来通信,有两种命令方式可以使用该协议
      1. 在服务器和路径之间使用双冒号,比如

        rsync /localDir/file user@remoteServerAddress::/remoteDir

      2. 显式使用,如

        rsync rsync://user@remoteServerAddress[:remoteServerPort]/remoteDir/file /localDir

  4. 以daemon方式配置和运行
    1. rsync可以在一端或者两端以daemon进程形式来运行,通过配置rsyncd.conf来定制同步业务
    2. 这里列举一个简单的配置文件/etc/rsyncd.conf:

      #global settings
      pid file = /var/rsync/rsync.pid
      port = 873
      lock file = /var/rsync/lock.log
      log file = /var/rsync/rsync.log

      #module settings
      [SyncFiles]
      path=/data/files/
      use chroot = no
      max connections = 5
      read only = yes
      write only = no
      list = no
      uid = nobody
      gid = nobody
      incoming chmod = 644
      auth users = syncUser
      secrets file = /etc/rsync.pass
      strict modes = yes
      hosts allow = 192.168.1.119
      hosts deny = *
      ignore errors = yes
      timeout = 120

    3. 授权文件/etc/rsync.pass格式

      syncUser:_password_

    4. 注意事项:需要chmod 600 /etc/rsync.pass
    5. 启动进程:rsync –daemon,可将此命令加入/etc/rc.local
    6. 客户端同步命令:

      rsync -az –password-file=./sync_auth rsync://syncUser@remoteServerAddress[:remoteServerPort]/SyncFiles/* /localDir

    7. 由于同步用户配置了权限,客户端每次rsync操作都需要输入密码,可以通过–password-file选项来指定密码文件,这样就可免去输入密码了,如上面命令所示。该密码文件的格式很简单,单行文本写入密码即可,同样需要chmod 600 ./sync_auth
  5. 检测文件是否需要同步
    1. -i参数:可以对对端文件的变更进行摘要,据此可以判断是否需要同步
    2. -n参数:尝试同步操作但不传输文件
    3. 结合起来,-in就可以根据输出来判断是否需要同步了
  6. 其他:
    1. –delete参数支持删除文件的同步
    2. -L支持软链接目标目录的同步
    3. 如果写入的目录没有权限,会报以下错误,执行chown -R nobody.nobody /data/files/修改权限即可解决

      rsync: mkstemp failed: Permission denied (13)

分类: Shell, 运维 标签: , , ,

一个简单的cnzz数据采集与监控方案

2016年6月8日 2 条评论
  1. 场景
    • 有多个网站需要监控
    • 每个网站的cnzz数据只能分别通过密码来查看
  2. 方案
    • 使用casperjs定时批量抓取每个网站的cnzz数据截图,对于监控来说,一般只抓取概要图和趋势图就行了
    • 将抓取的数据按日期保存在web服务器的html目录里,命名方式为cnzz/DATE/SiteID_overview.png和cnzz/DATE/SiteID_trends.png
    • 写个简单的php页面,通过SiteID枚举出当前日期下的各网站的概要图和趋势图
  3. 实现方法
分类: js, 监控 标签: , ,

使用casperjs进行网页截图

2016年6月7日 没有评论

casperjs有个很实用的功能就是网页截图,通过几个capture函数就能很方便的实现截图功能。

简单代码如下:

var casper = require(“casper”).create();
var x = require(‘casper’).selectXPath;  //用来简化XPath操作

casper.start(‘http://new.cnzz.com/v1/login.php?siteid=123454321′, function(){
this.fill(‘form[name=”form1″]’, {
‘password': 123456
}, true);
});

casper.then(function(){
//this.capture(‘cnzz.png’); //截取整个页面
this.captureSelector(‘cnzz.png’, x(‘//*[@id=”overview_top_order_table”]’)); //截取指定的selector
});

casper.run();

需要注意的是,如果网页内包含中文,服务器上需要安装中文字符集包。CentOS上通过以下命令来安装:

yum install bitmap-fonts bitmap-fonts-cjk

分类: js 标签: ,

使用casperjs爬取cnzz统计数据

2016年5月26日 没有评论

通过cnzz统计数据来监测网站的运行是运营和运维的一个重要手段,当站点比较多时,自动获取站点的统计数据能够极大的提高工作效率。

然而cnzz没有提供查询接口,需要我们自己手动编写代码来爬取数据。通过抓包可以发现需要很多步骤才能拿到数据,并且每次请求都携带了一些cookies等验证信息。如果一步步来实现的话非常麻烦,实际上我用Snoopy尝试进行抓取并不成功,总是跳转回登录url。

同事提供了一种方法:使用phantomjs模拟登录,试了一下,还真是方便很多。

这里提供了使用casperjs(封装了phantomjs)来进行抓取的实现代码,仅供参考。

var casper = require("casper").create()
casper.start('http://new.cnzz.com/v1/login.php?siteid=12345654321', function(){
    this.fill('form[name="form1"]', {
    'password': 1234560
}, true);   //true, 填充完毕后,立刻提交表单
});
casper.then(function(){
    var today=this.evaluate(function(){
        var tbl=document.getElementById("overview_top_order_table");
        return {
            pv:tbl.rows[1].cells[1].innerHTML,
            uv:tbl.rows[1].cells[2].innerHTML,
            ip:tbl.rows[1].cells[3].innerHTML,
        };
    });
    this.echo(today.pv);
    this.echo(today.uv);
    this.echo(today.ip);
});
casper.run();