crawler 使用jQuery风格实现
以前写过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],
- html/get,获取html内容并缓存到redis
暂时没有使用phantom.js等技术,普通的http get就能满足大部分需求 - crawlData,执行crawler对应的code.js,新配置的js脚本需要人工审核之后才能用于crawlData执行
获取页面超链接:demo.a[href],
获取页面图片地址:demo.img[src],
urls=[]
$("img[src]").each(function(){
src=$(this).attr('src')
if(src.indexOf('://')>0) urls.push(src)
})
crawl={'urls':urls}
由于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风格实现的更多相关文章
- nodejs使用jquery风格环境安装
BEGIN; 1.npm install jQuery 注意:是jQuery,不是jquery! 2.npm install jsdom 注意:直接执行会安装错误,必须先指定安装版本! 解决:修改pa ...
- JQuery的开发与使用心得
关于jQuery的 入门使用jQuery可以很容易或具有挑战性的,这取决于你如何使用JavaScript,HTML,CSS进行开发和编程. 要知道一件重要的事情是,jQuery是只是一个JavaScr ...
- 有jQuery背景,该如何用AngularJS编程思想?
"我可以熟练使用jQuery进行客户端应用的开发,但是现在我希望开始使用Angular.js.哪位能描述一下这个过程中必要的模式变化吗?希望您的答案能够围绕下面这些具体的问题: 1. 我如何 ...
- DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等
DotNet 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-dotnet 是由 quozd 发起和维护.内容包括:编译器. ...
- 掌握jQuery插件开发
进行jQuery插件开发前,首先要知道两个问题:什么是jQuery插件?jQuery插件如何使用? 第一个问题,jQuery插件就是用来扩展jQuery原型对象的一个方法,简单来说就是jQuery插件 ...
- 掌握jQuery插件开发,这篇文章就够了
---恢复内容开始--- 在实际开发工作中,总会碰到像滚动,分页,日历等展示效果的业务需求,对于接触过jQuery以及数据jQuery使用的人来说,首先想到的肯定是寻找现有的jQuery插件来满足形影 ...
- jQuery学习--Code Organization Concepts
jQuery官方文档: http://learn.jquery.com/code-organization/concepts/ Code Organization Concepts(代码组织概念) ...
- 曾经的超级明星类库jQuery未来也许不再会被前端程序猿追捧了!
作为火了十多年的老牌明星类库jQuery, 相信做前端的小伙伴肯定都或多或少的使用和追捧过,当然我也不例外, 作为第一个学习的js类库,我曾经也觉得它是真正的唯一, 帮助你处理恶心的浏览器CSS/JS ...
- 如何掌握jQuery插件开发(高能)
在实际开发工作中,总会碰到像滚动,分页,日历等展示效果的业务需求,对于接触过jQuery以及熟悉jQuery使用的人来说,首先想到的肯定是寻找现有的jQuery插件来满足相应的展示需求.目前页面中常用 ...
随机推荐
- 关于如何查看 MySQL 信息、查看Oracle 版本
方法一: 进入mysql cmd, mysql -u root status; 将显示当前mysql的version的各种信息. 方法二: 还是在mysql的cmd下,输入: select versi ...
- X509证书在window server 2003/IIS 6环境部署
利用makecert.exe工具生成的X509证书在winform程序中运行正常,但是给部署在IIS中的应用程序用却获取不到证书信息,返回为空.原因是,iis没有权限读取位于证书存储区的X509证书, ...
- ES6入门六:class的基本语法、继承、私有与静态属性、修饰器
基本语法 继承 私有属性与方法.静态属性与方法 修饰器(Decorator) 一.基本语法 class Grammar{ constructor(name,age){ //定义对象自身的方法和属性 t ...
- body测试onclick等鼠标事件无效果详解
DOM事件机制包括五部分: DOM事件级别 DOM事件流 DOM事件模型 事件代理 Event对象常见的方法和属性 但是有时候发现给body标签里设置onclick属性,不起作用,代码如下: 不管单击 ...
- Webpack4 splitChunks配置,代码分离逻辑
博客不知道啥时候写的了,一直在草稿箱没写完,突然感觉今年过去大半了,又没怎么写博客.写写完,有始有终 1.代码分离升级 原来项目代码分离是通过下面的配置,基于bundle-loader插件,通过rou ...
- “最不合格”的SAP应聘者: 从大学生到SAP成都研究院开发工程师
让我们把时光之轮倒拨回2006年,SAP成都研究院刚刚成立的时候,有一位年轻的电子科技大学研究生,网名雷米兰(这名字一看就是AC米兰铁杆粉丝),加入了SAP成都研究院并被派遣到SAP德国总部进行实习. ...
- windows 10 mysql-8.0.17-winx64的安装
1.官网下载,并解压 https://dev.mysql.com/downloads/mysql/ 下载下来之后是一个zip的压缩包文件:mysql-5.7.26-winx64.zip,然后对这个文件 ...
- 01.CNN调参
转载:调参是个头疼的事情,Yann LeCun.Yoshua Bengio和Geoffrey Hinton这些大牛为什么能够跳出各种牛逼的网络? 下面一些推荐的书和文章:调参资料总结Neural Ne ...
- 【CodeForces】915 G. Coprime Arrays 莫比乌斯反演,前缀和,差分
Coprime Arrays CodeForces - 915G Let's call an array a of size n coprime iff gcd(a1, a2, ..., *a**n) ...
- Lambda表达式语法进一步巩固
上一次已经初步使用到了Lambda表达式了,这次再次对它的语法进行一下巩固,因为它实在是太重要的,所以多花时间彻底理解它是非常有必要的. 在"Java8 in Action"一书中 ...