需求

当数字尾巴的甩甩尾巴有指定物品发布时,通知我!

实现

  1. 甩甩尾巴首页:http://trade.dgtle.com/dgtle_module.php?mod=trade&ac=index&typeid=&PName=&searchsort=0&page=1,page 参数是页码,可以同时抓取2-3页,以免时间间隔过大发布的物品太多导致爬不到.
  2. 抓取每个物品的标题,url,地址,价格,时间,是否交易完成,提取这几个属性,使用 xpath 或者 css selector,在 w3c 上都有相关教程,推荐两个 chrome 插件,可以检查表达式的结果,CSS Selector Tester,XPath Helper
  3. 提取数据,通过 chrome 开发者工具,可以粗略提取下,然后自己修改下表达式,基本就可以了,通过上面的插件测试下,基本就差不多了.
    image.png
    image.png
  4. 贴上我写好的配置文件,新建一个 Website Agent 导入就可以了.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    {
    "expected_update_period_in_days": "2",
    "url": [
    "http://trade.dgtle.com/dgtle_module.php?mod=trade&ac=index&typeid=&PName=&searchsort=0&page=1",
    "http://trade.dgtle.com/dgtle_module.php?mod=trade&ac=index&typeid=&PName=&searchsort=0&page=2",
    "http://trade.dgtle.com/dgtle_module.php?mod=trade&ac=index&typeid=&PName=&searchsort=0&page=3"
    ],
    "type": "html",
    "mode": "on_change",
    "extract": {
    "title": {
    "css": "div.tradetop > p.tradetitle > a",
    "value": "string(.)"
    },
    "info": {
    "xpath": "//*[@id=\"wp\"]/div[3]/div/p[1]/.",
    "value": "normalize-space(.)"
    },
    "state": {
    "css": "div.tradepic",
    "value": "not(contains(@class,'comp'))"
    },
    "date": {
    "css": ".tradedateline",
    "value": "string(.)"
    },
    "img": {
    "css": ".tradepic > a > img",
    "value": "@src"
    },
    "url": {
    "css": ".tradepic > a",
    "value": "concat('http://trade.dgtle.com',@href)"
    }
    }
    }
  5. 过滤指定物品,需要创建一个Trigger Agent,过滤出小米相关物品,只要标题包含这个关键字就可以了,代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
    "expected_receive_period_in_days": "2",
    "keep_event": "true",
    "rules": [
    {
    "type": "regex",
    "value": "小米",
    "path": "title"
    }
    ],
    "message": "甩甩尾巴有关 `小米` 的物品更新了"
    }
  6. 将 event 通知到 Slack, 也可以邮件或者其他.