zoukankan      html  css  js  c++  java
  • 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]

      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]

    image

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

    • crawlData,恰好本站博客是基于node.js的ourjs,下面是code.js的执行逻辑:直接调用eval(code),因此自定义代码需要审核!
      image
      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]
      }
    • 如何使用数据:后续……
  • 相关阅读:
    怎么样下载安装 pyinstaller
    怎样给python编译成dll文件
    解决jmeter报connection reset 错误的方法
    redis使用jmeter测试
    前端性能测试ShowSlow+Yslow
    性能测试工具curl-loader(linux)
    Js 数组返回去重后的数据
    批量处理sql 数据存入xml类型列
    SQL Server游标(转)
    SQL中varchar和nvarchar的区别
  • 原文地址:https://www.cnblogs.com/xingqi/p/11108291.html
Copyright © 2011-2022 走看看