如何使用jsoup或其他方法删除网页中的js代码部分?

Snys 发布于 2011/11/21 20:36
阅读 2K+
收藏 1
我想删除掉以下代码中<script>与</script>之间的j部分,试了好多方法也没成功,求指点,代码如下:   
<script><![CDATA[
    $(document).ready(function(){
      getResData();
      function getResData(){
        jQuery.getJSON("/application/visits/visits.jsp?sid=then&r="+Math.random(), function(data){
          //$("#today").empty();
          //$("#today").append(data[0].today);
          $("#total").empty();
          $("#total").append(data[0].total);
          //$("#arverage").empty();
          //$("#arverage").append(data[0].arverage);    
        });
      };
    });
    //]]>

    </script>

谢谢先!

加载中
1
opal
opal

java的正则表达式:

"<\\s*?script[^>]*?>[\\s\\S]*?<\\s*?/\\s*?script\\s*?>"

Snys
Snys
谢谢,可以解决问题了!
0
红薯
红薯
是删除掉 <script> 中的所有内容还是什么? 什么叫j部分?
Snys
Snys
哦~就是删除<script>和</script>之间的所有内容,也就是js代码。谢谢
0
红薯
红薯

最简单应该用正则表达式,可惜我不会。

jsoup 的话思路就是遍历每个 tag,判断如果 tag 的 name 为 script 的就直接 remove 这个 tag

红薯
红薯
@Snys : 没有成功就说明用错了,可以把你的代码贴出来让大家看看
Snys
Snys
正则表达式我试过了,没有成功。而jsoup遍历tag,我之前用这个试着删除过text部分,但也没有成功,老师让我用SAX解析网页文件,遍历整个网页,然后利用栈,出栈入栈,进行配对,最后只保留下来标签以及标签名,感觉不好做,还没有完成。
0
TonyJian
TonyJian
自定义Whitelist,用Cleaner直接就干掉了
Snys
Snys
这个我想到了,但是不知道如何定义啊,Jsoup也是刚接触,指点一下,谢谢!
0
TonyJian
TonyJian

查查api不就好了,上面都说明的,官网上也有一些例子

String html = "<div>hello <s>world</s></div><script type=\"text/javascript\">function hello(){alert(1);}</script><span>my name is tony</span>";
  Whitelist whitelist = Whitelist.relaxed();//创建relaxed的过滤器
  Document doc = Jsoup.parseBodyFragment(html);
  whitelist.addTags("span","s");//添加relaxed里面没有的标签
  Cleaner cleaner = new Cleaner(whitelist);
  doc = cleaner.clean(doc);//按照过滤器清除
  //doc.outputSettings().prettyPrint(false);//是否格式化
  Element body = doc.body();
  System.out.println(doc.html());//完整的html字符串
  System.out.print(body.html());//body片段

0
Snys
Snys
@红薯 :
我写的代码如下,现在已经基本上可以完成我的工作,但是在处理大型xml文件(超过10MB)的过程中就会内存溢出,我还要处理更大的例如几百兆的,有没有办法解决,谢谢。
 public class Test { 
    private static String text;

    public static void main(String []args) throws Exception{
         Test t= new Test();
         t.test();
    }
    public void test() throws IOException{
        BufferedReader buf=null;
        buf=new BufferedReader(new InputStreamReader(System.in));
        String s=null;
        System.out.print("请输入文件路径:");
        try{
            s=buf.readLine();
        }catch(IOException e){
            e.printStackTrace();
        }
        System.out.println(s);
        File f=new File(s);
        String str[]=f.list();//获得文件序列
        for(int i=0;i<str.length;i++){
            if(str[i].substring(str[i].length()-4,str[i].length()).equals(".xml")){
            File f1=new File(f+File.separator+str[i]);
            Document doc = Jsoup.parse(f1,"UTF-8","http://www.html.net/");//利用Jsoup对获得的网页进行解析
            String str2=doc.html();
            str2=str2.replaceAll("<!.+>","");//删除注释
            str2=str2.replaceAll("<!--[\\s\\S]*?-->","");//删除注释
            str2=str2.replaceAll("<![\\s\\S]*?-->","");//删除注释
            String regex = "<[^>]+>";//利用正则表达式删除文本
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(str2);
            StringBuilder sb = new StringBuilder();
            while(m.find()){
                sb.append(m.group());
            }
            String newStr = sb.toString();
            newStr=newStr.replaceAll("(<\\/?)\\s*(\\S+).*?(\\/?>)", "$1$2$3");//删除标签属性
            newStr=newStr.replaceAll("<\\s*?script[^>]*?>[\\s\\S]*?<\\s*?/\\s*?script\\s*?>","<script></script>");//修改js代码
            newStr=newStr.replaceAll(":","");
            Document ndoc=Jsoup.parse(newStr);
            File nf=new File("d:"+File.separator+"test_back");//新建一个文件夹目录
            nf.mkdir();//新建文件夹
            File output= new File("d:"+File.separator+"test_back"+File.separator+str[i]);//定义输出地址
            output.createNewFile();//新建输出文件
            //str[i]=str[i].replaceAll(".armx+",".xml");
            //str[i]=str[i].replaceAll(".htm+",".xml");
            //str[i]=str[i].replaceAll(".aspx+",".xml");
            //str[i]=str[i].replaceAll(".jsp+",".xml");
            OutputStreamWriter outputsw = new OutputStreamWriter(new FileOutputStream("d:"+File.separator+"test_back"+File.separator+str[i]), "UTF-8");
            outputsw.write(ndoc.html());
            outputsw.close();
        }
    }
    }   
   
}

返回顶部
顶部