zoukankan      html  css  js  c++  java
  • 【2022.01.06】使用树莓派安装huginn监控网页变换

    【2022.01.06】使用树莓派安装huginn监控网页变换

    前言

    最近在使用树莓派折腾docker,想找个监控网页变化的软件,这种软件在我去年考研的时候给了我很大的帮助

    例如distill,(每十分钟检测特定学校的调剂信息,发生变化的时候及时邮件告诉我,不过distill的免费版功能受限太多,而且需要电脑持续开机和浏览器得在前台,太过耗电,所以我要使用树莓派来解决这个问题)

    如果windows想要类似功能,也可以使用Quicker的监控器功能,但是同样需要保持电脑开机,所以并不是很方便(我用这个软件去订阅番剧更新)

    但是很多的WebMonitor是使用不了的,因为树莓派是arm32v7架构的,不能使用原版的部署,终于找到一个能用的

    安装

    huginn这部分中文网上教程不多,折腾了我好久,这里记录一下

    找了好多的docker,只有这个成功部署了,如果失败了的话多重试几次,我用的是树莓派3B
    sudo docker run -d --name huginn --restart=on-failure:5 -p 3000:3000 -v huginn-data:/var/lib/mysql docker.mirror.aliyuncs.com/mjysci/huginn:arm32v7
    

    安装好后进入网页

    http://树莓派地址:3000
    

    点击Login,初始账号:admin,密码:password

    主要功能

    进入后可以看到上方的三个主要功能

    Agents,一个监控的实例

    Scenarios,监控实例的集合(比如有的实例是看博客的,有的看价格变化的)

    Events,监控的事件记录查看

    添加实例

    先进入Scenarios,创建一个分类“博客”,先以我的博客变化作为第一个实例

    在该分类下新增一个实例,选择Website Agent

    只要更改名字和检测周期就行,其他可以不用修改

    接下来就是最关键的Options的填写,右边的所有英文都是在解释如何填写这部分内容的

    URL:监控链接

    TYPE:返回的数据类型

    支持文档类型

    类型值可以是xml、html、json和text。

    一般是html,如果你要检测的是RSS的变化的话,那就用XML

    MODE:记录模式

    如果是每次都要推送,all

    如果是变化时再推送,on_change

    extra:抓取规则

    url和title表示抓取字段的名称,可随意命名;(后面用得着,作为参数传给其他Agent)

    css表示抓取内容的css路径,value表示抓取的值,@href表示抓取对应css标签的href属性值,还有@src,@title等等;

    如果要抓取对应标签的值,可填.(包括html代码的全部内容),string(.)(只包含对应标签的值),text()等同string(.)

    填写方法

    这部分如果不理解的话,可以查看它的七个默认实例,DryRun一下(不计入Events)

    进入它上面的网页,去看看它是怎么运行的到这些数据的

    {
      "url": "https://xkcd.com",
      "mode": "on_change",
      "expected_update_period_in_days": 5,
      "extract": {
        "url": {
          "css": "#comic img",
          "value": "@src"
        },
        "title": {
          "css": "#comic img",
          "value": "@alt"
        },
        "hovertext": {
          "css": "#comic img",
          "value": "@title"
        }
      }
    }
    
    [
      {
        "url": "//imgs.xkcd.com/comics/sunshield.png",
        "title": "Sunshield",
        "hovertext": "RIP the surface of Mars"//这里是鼠标悬浮会看到的东西
      }
    ]
    

    打开浏览器的F12工具,查看你要爬取的数据位置的id或者是class

    但是这种方法其实很麻烦,要自己寻找、自己填写,下面讲一种比较便捷的方法Xpath

    提取Xpath

    这里以我的博客为例

    在这两个位置分别右键复制xpath得到两个不一样的xpath

    //*[@id="mainContent"]/div/div[1]/div[2]/a
    //*[@id="mainContent"]/div/div[2]/div[2]/a
    所以想要得到页面中的所有标题,就要把两个合并为
    //*[@id="mainContent"]/div/div/div[2]/a
    因为url要返回的是链接,所以要在这个基础上加入<a>标签中的href
    最终的xpath值为
    //*[@id="mainContent"]/div/div/div[2]/a/@href
    url的value中填入一个.就可以
    
    title的xpath同理如上
    //*[@id="mainContent"]/div/div/div[2]/a/span
    title的值不在<>之中,所以value使用
    string(.) 获得标签<>的文本
    normalize-space(.) 这个在string(.)的基础上可以去掉空格
    

    编辑好的Options如下

    {
      "expected_update_period_in_days": "2",
      "url": "https://www.cnblogs.com/mokou/",
      "type": "html",
      "mode": "on_change",
      "extract": {
        "url": {
          "xpath": "//*[@id=\"mainContent\"]/div/div/div[2]/a/@href",
          "value": "."
        },
        "title": {
          "xpath": "//*[@id=\"mainContent\"]/div/div/div[2]/a/span",
          "value": "normalize-space(.)"
        }
      }
    }
    

    DryRun得到的结果如下

    这样就得到我们想要的结果了

    下一期做,怎么进行agents之间的传递数据

  • 相关阅读:
    php的下载与安装
    apache 的下载与配置
    Composer 安装与使用
    WampServer 的安装
    SQLServer主键约束和唯一约束的区别
    Mac如何修改Host
    解决XCode11中 [Application] The app delegate must implement the window property if it wants to use a main storyboard file.的问题
    Xcode10.1 import头文件无法索引
    iOS
    如何让windows服务器IIS支持.apk/.ipa文件下载
  • 原文地址:https://www.cnblogs.com/mokou/p/15772551.html
Copyright © 2011-2022 走看看