zoukankan      html  css  js  c++  java
  • 脚本嵌入式抓取引擎

    J2SE 6.0 (有些地方也叫1.6)增加了脚本嵌入,使JAVA可以模拟动态语言的方式运行。这个类是ScriptEngineManager,被添加在javax.script命名空间中。执行脚本的程序很简单,看以下代码:

            ScriptEngineManager m = new ScriptEngineManager();
            ScriptEngine engine 
    = m.getEngineByExtension("js");
            
    try {
                engine.eval("java.lang.System.out.println(\"测试脚本输出\");");
            } 
    catch (ScriptException e) {
                log.Log(
    "执行脚本错误:" + file.getFileName());
                log.Log(e.getMessage());

            }
    在java执行的javascript代码中也可以调用java对象。这样就可以由java提供一些API,由javascript来组织逻辑部分。
    比如,可以让上面的代码执行以下脚本:
    var Crawler = com.cnblogs.yurow.engin.Crawler;
    var StreamWriter = com.cnblogs.yurow.engin.StreamWriter;
    var RAMFile = com.cnblogs.yurow.engin.RAMFile;
    var out = java.lang.System.out;
    var starturl = "http://www.cnblogs.com/birdshover/default.html?page=";


    for(var i = 435112;i<435212;i++){
        
    var tempurl = starturl + i;
        
    var content = new Crawler(tempurl).getResponse("utf-8");
        
    if(content != null){
            
    var file = new RAMFile(tempurl,content);
            StreamWriter.Save(
    "result/" + i + ".html",file,"utf-8",true);
        }
    }
    其中Crawler是抓取类,StreamWriter是用来保存文件的,RAMFile是内存中文件的组织结构。这些都是自己定义的java类。
    我包装了一个JCrawler.jar,读取当前目录下的js文件以确定需要执行的脚本。这些脚本可能被存放在不同的目录。读取到这个目录列表,然后执行目录列表中每个javascript的逻辑。
    演示抓取程序:
    执行其中的bat文件就可以执行抓取,默认把抓取到的文件保存在result目录下。
    写javascript的时候要注意脚本文件的注释最好不要使用单行只是“//”,而是要“/*  */”。运行环境需要jre6.0。
  • 相关阅读:
    JavaScript的学习--正则表达式
    AngularJS的学习--TodoMVC的分析
    数据可视化(6)--Google Charts实例
    数据可视化(5)--jqplot经典实例
    数据可视化(4)--jqplot
    算法与数据结构(1)--线性表
    数据可视化(3)--Google Charts
    数据可视化(2)--Justgage
    数据可视化(1)--Chart.js
    Node.js连接mysql
  • 原文地址:https://www.cnblogs.com/birdshover/p/1378230.html
Copyright © 2011-2022 走看看