本文来源于:http://www.cnblogs.com/birdshover/ 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。
|