以前写过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]

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

crawler 使用jQuery风格实现的更多相关文章

  1. nodejs使用jquery风格环境安装

    BEGIN; 1.npm install jQuery 注意:是jQuery,不是jquery! 2.npm install jsdom 注意:直接执行会安装错误,必须先指定安装版本! 解决:修改pa ...

  2. JQuery的开发与使用心得

    关于jQuery的 入门使用jQuery可以很容易或具有挑战性的,这取决于你如何使用JavaScript,HTML,CSS进行开发和编程. 要知道一件重要的事情是,jQuery是只是一个JavaScr ...

  3. 有jQuery背景,该如何用AngularJS编程思想?

    "我可以熟练使用jQuery进行客户端应用的开发,但是现在我希望开始使用Angular.js.哪位能描述一下这个过程中必要的模式变化吗?希望您的答案能够围绕下面这些具体的问题: 1. 我如何 ...

  4. DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等

    DotNet 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-dotnet 是由 quozd 发起和维护.内容包括:编译器. ...

  5. 掌握jQuery插件开发

    进行jQuery插件开发前,首先要知道两个问题:什么是jQuery插件?jQuery插件如何使用? 第一个问题,jQuery插件就是用来扩展jQuery原型对象的一个方法,简单来说就是jQuery插件 ...

  6. 掌握jQuery插件开发,这篇文章就够了

    ---恢复内容开始--- 在实际开发工作中,总会碰到像滚动,分页,日历等展示效果的业务需求,对于接触过jQuery以及数据jQuery使用的人来说,首先想到的肯定是寻找现有的jQuery插件来满足形影 ...

  7. jQuery学习--Code Organization Concepts

    jQuery官方文档:  http://learn.jquery.com/code-organization/concepts/ Code Organization Concepts(代码组织概念) ...

  8. 曾经的超级明星类库jQuery未来也许不再会被前端程序猿追捧了!

    作为火了十多年的老牌明星类库jQuery, 相信做前端的小伙伴肯定都或多或少的使用和追捧过,当然我也不例外, 作为第一个学习的js类库,我曾经也觉得它是真正的唯一, 帮助你处理恶心的浏览器CSS/JS ...

  9. 如何掌握jQuery插件开发(高能)

    在实际开发工作中,总会碰到像滚动,分页,日历等展示效果的业务需求,对于接触过jQuery以及熟悉jQuery使用的人来说,首先想到的肯定是寻找现有的jQuery插件来满足相应的展示需求.目前页面中常用 ...

随机推荐

  1. javaIO——PipedReader & PipedWriter

    1. 概述: PipedReader 和 PipedWriter,意为管道读写流.所谓管道,那就是有进有出,所以这也是它们跟其它流对象最显著的区别:PipedReader和PipedWriter必须成 ...

  2. 关于dataset

    举个栗子: <div id="cost" data-drink="coffee" data-food="sushi" data-mea ...

  3. c# datatable 如何转CSV文件

    public void DataTableToCSV(DataTable dtCSV, string csvFileFullName, bool writeHeader, string delimet ...

  4. Flutter 34: 图解自定义 View 之 Canvas (一)

    小菜最近在学习自定义 View,刚了解了一下 Paint 画笔的神奇之处,现在学习一下 Canvas 画布的神秘之处.Flutter 提供了众多的绘制方法,小菜接触不深,尽量都尝试一下. Canvas ...

  5. 如何使用Marketing Cloud的扩展字段作为搜索条件进行搜索

    需求:我在Marketing Cloud的contact模型上用custom field这个应用创建了一个Extension field,名称为微信ID. 现在客户的需求是使用这个字段作为过滤条件进行 ...

  6. ngnix反向代理后获取用户真实ip及https配置

    server {listen 80;listen 802;server_name test111.xxxx.com 118.24.122.101; gzip on;gzip_min_length 10 ...

  7. 【python】python _、__、__xx__之间的差别

    本文来自 yzl11 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yzl11/article/details/53792416?utm_source=copy 单下 ...

  8. 01_日志采集框架Flume简介及其运行机制

    离线辅助系统概览: 1.概述: 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集.结果数据导出. 任务调度等不可或缺的辅助系统,而这些辅助 ...

  9. 算法---FaceNet在Tf下的实战篇

    FaceNet---Tensorflow下的下的实战篇 @WP20190225 ===============目录=============== 一.FaceNet算法简介 二.FaceNet配置与使 ...

  10. wmware虚拟化的启动问题

    2019-05-09,14点14 vmware出现VMware提示:已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作.解决方案 进入bios里面intel 虚拟化技术 先设 ...