LinkExtractor.java
上传用户:ynjin1970
上传日期:2014-10-13
资源大小:6438k
文件大小:4k
源码类别:

中间件编程

开发平台:

Visual C++

  1. //package org.apache.lucene.index;
  2. import java.io.*;
  3. import org.htmlparser.Node;
  4. import org.htmlparser.Parser;
  5. import org.htmlparser.tags.LinkTag;
  6. import org.htmlparser.util.ParserException;
  7. import java.util.*;
  8. import java.net.*;
  9. /**
  10.  * LinkExtractor extracts all the links from the given webpage
  11.  * and prints them on standard output.
  12.  */
  13. public class LinkExtractor {
  14. private String location;
  15. private Parser parser;
  16. private static int b=0;
  17. private static int tID;
  18. private static int iNode;
  19. public final int DEEP=3; //遍历的深度
  20. public static Vector svecLink, svecOutlink;
  21. public static String hostName;
  22.     public static boolean bl;
  23. public LinkExtractor(String location) {
  24. this.location = location;
  25.     hostName=GetHostName(location);
  26.     System.out.println("主机名称是 "+hostName);
  27.      
  28.     bl=false;
  29. svecLink=new Vector();
  30. svecOutlink=new Vector();
  31.         svecLink.add(location);
  32. }
  33. public void extractLinks(String loc) throws ParserException {
  34.     System.out.println("Parsing "+loc+" for links...");
  35.     
  36.     Vector vecTemp=new Vector();
  37.     
  38. try {
  39. this.parser   = new Parser(loc); // Create the parser object
  40. parser.registerScanners(); // Register standard scanners (Very Important)
  41.         bl=true;
  42. }
  43. catch (ParserException e) {
  44. bl=false;
  45.      e.printStackTrace();
  46. }
  47. String ss,str1;
  48.         URL wwwurl;
  49.         boolean byes;
  50.         
  51.       int a=0;
  52.         b++;
  53. Node [] links = parser.extractAllNodesThatAre(LinkTag.class);
  54. for (int i = 0;i < links.length;i++) {
  55.       if(bl)
  56.       {
  57.        byes=true;
  58.         System.out.println("Total url is "+links.length+"This page has url "+i);
  59.       
  60.        LinkTag linkTag = (LinkTag)links[i];
  61.             str1=linkTag.getLink();
  62.             
  63.            // System.out.println("the url is "+str1);&&!svecOutlink.contains(str1)
  64.             if(str1.equals("")) continue;
  65.             
  66.             if(str1.charAt(str1.length()-1)=='/'
  67.             ||str1.charAt(str1.length()-1)=='\') 
  68.             str1=str1.substring(0,str1.length()-1); 
  69. if(!svecLink.contains(str1)) 
  70. {   
  71.     try
  72.     {
  73.    wwwurl=new URL(str1);
  74.    wwwurl.getContent();
  75.     }
  76.     catch(MalformedURLException e)
  77.     {
  78.         byes=false;
  79.     }
  80.     catch(IOException e)
  81.     {
  82.         byes=false;
  83.     }
  84. if(GetHostName(str1).equals(hostName) && byes)
  85. {
  86.      a++;
  87.      tID++;
  88.      svecLink.add(str1);
  89.      vecTemp.add(str1);
  90.      System.out.println("the url is "+str1);
  91.      }
  92.      else
  93.      {
  94.         
  95.          svecOutlink.add(str1);
  96.      }
  97.            } 
  98.            
  99. }
  100.      String strNew;
  101.      if(a>0&&b<=DEEP)
  102.      {    
  103.           
  104.           for(int i=0;i<vecTemp.size();i++)
  105.          {
  106.            strNew=(String)vecTemp.get(i);
  107.            System.out.println("this is "+strNew);
  108.            extractLinks(strNew);
  109.          }
  110.     }
  111.  
  112. }
  113. boolean linkAttribute(String strLink)
  114. {
  115.  return true;
  116. }
  117.     static void printCol(Enumeration col)
  118.     {
  119.     
  120.      String str;
  121.         while(col.hasMoreElements())
  122.         {
  123.         str=(String)col.nextElement();
  124.         System.out.println(str);
  125.         }
  126.     }
  127.     
  128.     public String GetHostName(String hostname)
  129.     {
  130.      URL aurl;
  131.      String ss=" ";
  132.      try
  133. {
  134.     aurl=new URL(hostname);
  135.     ss=aurl.getHost();
  136.      }
  137.     catch(MalformedURLException e)
  138.     {
  139.       e.printStackTrace();
  140.      //return "null";
  141.     }
  142.     return ss;
  143.     }
  144.     
  145. public static void main(String[] args) {
  146. /*
  147. if (args.length<0) {
  148. System.err.println("Syntax Error : Please provide the location(URL or file) to parse");
  149. System.exit(-1);
  150. }*/
  151.     Vector allLink=new Vector();
  152. String strNew,strall1,strall2,str;
  153. String ss="http://www.dlut.edu.cn/";
  154. LinkExtractor linkExtractor = new LinkExtractor(ss);
  155. try {
  156.         linkExtractor.extractLinks(ss);
  157.     Enumeration col=svecLink.elements();
  158.             while(col.hasMoreElements())
  159.             {
  160.              str=(String)col.nextElement();
  161.              System.out.println(str);
  162.             }
  163.             
  164. }
  165. catch (ParserException e) {
  166. e.printStackTrace();
  167. }
  168. }
  169. }