以前写过java版的crawler,最近看了Groovy的XmlSlurper,效果还是不太满意,直到这篇文章启发了我:how-to-make-a-simple-web-crawler-in-javascript-and-node-js。于是就想到使用jQuery风格的js来解析html并获取数据,把这样的js碎片逻辑作为配置从而支持更灵活的自定义。

crawler的原始构思及说明:

  • crawlConfig,配置crawler:crawl=code.js,新配置的js脚本需要人工审核之后才能用于crawlData执行
    获取所有a标签的href属性的配置,demo.a[href]
  • urls=[]

    $("a[href]").each(function(){
         href=$(this).attr('href')
         if(href.indexOf('://')>0) urls.push(href)

    })

    crawl={'urls':urls}
    获取所有img标签的src属性的配置,demo.img[src]

    urls=[]

    $("img[src]").each(function(){
         src=$(this).attr('src')
         if(src.indexOf('://')>0) urls.push(src)

    })

    crawl={'urls':urls}

  • html/get,获取html内容并缓存到redis
    暂时没有使用phantom.js等技术,普通的http get就能满足大部分需求
  • crawlData,执行crawler对应的code.js,新配置的js脚本需要人工审核之后才能用于crawlData执行
    获取页面超链接:demo.a[href]
    获取页面图片地址:demo.img[src]

由于crawl是比较敏感的代码,因此本站只开放了crawlConfig、crawlData体验功能(自定义code.js需要审核)。同时还实现了车次信息获取的功能。

  • crawlData,恰好本站博客是基于node.js的ourjs,下面是code.js的执行逻辑:直接调用eval(code),因此自定义代码需要审核!

    html=obj.substring(7),是由于老代码使用了默认的JdkSerializationRedisSerializer。
    crawlData,其实相当于crawler的一个step被执行,而多个step的有序组合就构成了一个完整的crawler。
  • saveData,本站做了一个完整的crawler,因此data需要相应的设计:urls返回后续step的网址列表,data返回数据并按key的规则存入redis
    crawl = {
         "urls": ["url", "url"],
         "data": ["set_{key}": obj, "hset_{map}_{key}": obj]

    }
  • 如何使用数据:后续……

最新文章

  1. HTML5 程序设计 - 使用HTML5 Canvas API
  2. TcxComboBox控件说明
  3. Windows Server 2008修改远程桌面连接数
  4. leetcode@ [355] Design Twitter (Object Oriented Programming)
  5. Windows Live Writer Install Faied
  6. DOSUSB 2.0 免费版的限制原理
  7. Jmeter连接SqlServer数据库进行压力测试
  8. CSS-笔记1-选择器与文本元素
  9. ES6中Promise对象个人理解
  10. ESXI的安装和部署
  11. centos7之zabbix监控mysql(mariadb)数据库
  12. 自学stm32就要记住入了这个“大坑”要耐得住寂寞
  13. Mac下git配置
  14. Django admin参数配置
  15. Linux多进程和多线程的一次gdb调试实例
  16. python截取字符串
  17. next_permutation函数和per_permiutation函数
  18. 1034. [ZJOI2008]泡泡堂【贪心】
  19. PV对第三方存储的访问模式支持
  20. CountDownLatch详解

热门文章

  1. zepto学习(一)之click事件和tap事件比较
  2. sqlserver错误状态码解释
  3. 最简单的一个win32程序
  4. JavaScript Basics_Fundamentals Part 1_Variables
  5. VirtualBox使用
  6. 支持向量机通俗导论 ——理解SVM的三层境界 总结
  7. 学习手写vue,理解原理
  8. Redis安装及前后置启动
  9. 十六, k8s集群资源需求和限制, 以及pod驱逐策略。
  10. php连接oracle oracle开启扩展