现在的位置: 首页 > 综合 > 正文

清一色‘body’ 全文剖

2013年11月05日 ⁄ 综合 ⁄ 共 2972字 ⁄ 字号 评论关闭

对于不同服务器名的站点,可以把全文内容都抓取下来。然后根据高亮显示的提示,从内容中截取一定的长度。其实,本来最主要的问题就是对抓取的网页进行分类,尤其是标题的选择。其他均次之。

记录了一下自己写的代码(校内):

  1. package com.extractor.hangdian;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import org.htmlparser.Node;
  7. import org.htmlparser.NodeFilter;
  8. import org.htmlparser.Parser;
  9. import org.htmlparser.filters.TagNameFilter;
  10. import org.htmlparser.util.NodeList;
  11. import org.htmlparser.util.ParserException;
  12. import org.htmlparser.visitors.TextExtractingVisitor;
  13. import com.extractor.Extractor;
  14. public class ExtractHan extends Extractor{
  15.     public void extract()
  16.     {
  17.         BufferedWriter bw=null;
  18.         String body;
  19.         NodeFilter bodyFilter=new TagNameFilter("body");
  20.         
  21.         try {
  22.             NodeList bodyList=this.getParser().parse(bodyFilter);
  23.             Node bodyNode=bodyList.elementAt(0);
  24.             /*
  25.              * bodyNode.toHtml()中的toHtml()必不可少。
  26.              */
  27.             Parser parser=new Parser(bodyNode.toHtml());
  28.             TextExtractingVisitor visitor=new TextExtractingVisitor();
  29.             parser.visitAllNodesWith(visitor);
  30.             body=visitor.getExtractedText();
  31.             
  32.             String newtext="";
  33.             if(body.length()>21376)
  34.                 body=body.substring(0,10000);
  35.             for(int i=0;i<body.length();i++)
  36.             {
  37.                 char ch=body.charAt(i);
  38.                 
  39.                 if(ch=='<')
  40.                 {
  41.                     i++;
  42.                     while(body.charAt(i)!='>')
  43.                         i++;
  44.                 }       
  45.                 
  46.                 if(ch!='<'&&ch!=' '&&ch!='/r'&&ch!= '/n')
  47.                 newtext+=ch;
  48.             }
  49.             
  50.             /*
  51.              * 要做校内搜索,url还是个难题啊
  52.              */
  53.             int end1=getInputFilePath().lastIndexOf("i");
  54.             int end2=getInputFilePath().lastIndexOf(".");
  55.             String url_seg1=getInputFilePath().substring(3,end1);
  56.             String url_seg2=getInputFilePath().substring(end1, end2);
  57.             String url_seg=url_seg1+".asp?"+url_seg2;
  58.             url_seg=url_seg.replaceAll("////","/");
  59.             String url="http://"+url_seg;
  60.             
  61.             try {
  62.                 bw=new BufferedWriter(new FileWriter(new File(this.getOutputPath()+Extractor.count+".txt")));
  63.                 
  64.                 bw.write(url+NEWLINE);
  65.                 bw.write(newtext+NEWLINE);
  66.             } catch (IOException e) {
  67.                 e.printStackTrace();
  68.             }           
  69.         } catch (ParserException e) {
  70.             e.printStackTrace();
  71.         }
  72.         if(bw!=null)
  73.             try {
  74.                 bw.close();
  75.             } catch (IOException e) {
  76.                 e.printStackTrace();
  77.             }
  78.     }
  79.     
  80.     public static void main(String[]args) throws Exception
  81.     {
  82.         Extractor extractor=new ExtractHan();
  83.         extractor.setOutputPath("需要存储的文件地址");
  84.         File file=new File("源文件的存放位置");
  85.         traverse(extractor,file);
  86.     }
  87. }

由于对网页的url处理的还不够完善,因此还没有做到最好,而且我最近也不想搞了,所以就先放着吧。

网页路径问题哦!

抱歉!评论已关闭.