URLFinder.java
上传用户:qing5858
上传日期:2015-10-27
资源大小:6056k
文件大小:3k
源码类别:

搜索引擎

开发平台:

Java

  1. package net.javacoding.jspider.core.util.html;
  2. import net.javacoding.jspider.core.util.URLUtil;
  3. import java.net.MalformedURLException;
  4. import java.net.URL;
  5. import java.util.StringTokenizer;
  6. /**
  7.  * $Id: URLFinder.java,v 1.9 2003/04/10 16:19:17 vanrogu Exp $
  8.  */
  9. public class URLFinder {
  10.     public static final String basePattern = "<base href=";
  11.     public static final String[] patterns = {
  12.       "href=",
  13.       "src=",
  14.       "background="
  15.     };
  16.     public static void findURLs(URLFinderCallback callback, String line) {
  17.         findBase(callback, line, basePattern);
  18.         for (int i = 0; i < patterns.length; i++) {
  19.             String pattern = patterns[i];
  20.             findURLs(callback, line, pattern);
  21.         }
  22.     }
  23.     protected static void findBase(URLFinderCallback callback, String line, String pattern) {
  24.         String lineLowerCase = line.toLowerCase();
  25.         int pos = lineLowerCase.indexOf(pattern);
  26.         if ( pos != -1 ) {
  27.             String url = "";
  28.             try {
  29.                 url = extractURL(line, pos + pattern.length());
  30.                 URL baseURL = URLUtil.normalize(new URL(url));
  31.                 callback.setContextURL(baseURL);
  32.             } catch (MalformedURLException e) {
  33.                 callback.malformedContextURLFound(url);
  34.             }
  35.         }
  36.     }
  37.     protected static void findURLs(URLFinderCallback callback, String line, String pattern) {
  38.         String lineLowerCase = line.toLowerCase();
  39.         int pos = lineLowerCase.indexOf(pattern);
  40.         while (pos != -1) {
  41.             String uri = "";
  42.             try {
  43.                 uri = extractURL(line, pos + pattern.length());
  44.                 URL baseURL = callback.getContextURL();
  45.                 if ( ! URLUtil.isFileSpecified(baseURL)) {
  46.                 // Force a slash in case of a folder (to avoid buggy relative refs)
  47.                    baseURL = new URL(baseURL.toString() + "/");
  48.                 }
  49.                 URL foundURL = URLUtil.normalize(new URL(baseURL, uri));
  50.                 callback.urlFound(foundURL);
  51.             } catch (MalformedURLException e) {
  52.                 callback.malformedUrlFound(uri);
  53.             }
  54.             pos = lineLowerCase.indexOf(pattern, pos + pattern.length());
  55.         }
  56.     }
  57.     protected static String extractURL(String string, int pos) {
  58.         char c = string.charAt(pos);
  59.         String ret = "";
  60.         if (c == ''' || c == '"') {
  61.             string = string.substring(pos + 1);
  62.         } else {
  63.             string = string.substring(pos);
  64.         }
  65.         if (string.length() > 0) {
  66.             c = string.charAt(0);
  67.             if (c == ''' || c == '"' || c == '>') {
  68.                 ret = "";
  69.             } else {
  70.                 StringTokenizer st = new StringTokenizer(string, " "'>");
  71.                 ret = st.nextToken();
  72.             }
  73.         }
  74.         int p = ret.indexOf('#');
  75.         if (p > -1) {
  76.             return ret.substring(0, p);
  77.         } else {
  78.             return ret;
  79.         }
  80.     }
  81. }