自己圈养小爬虫(三)——提取链接2

提取链接1里面,我们提取了fromURL,即当前URL的路径,用来对相对路径进行处理。但是很快就发现了还有另外一种情况,即:href="/a/b/1.html"这种路径。
 
在开头的地方有个斜杠,表面这个路径是相对于根目录的,所以必须要提取出当前URL的根目录才行,建立一个变量:rootURL。

/**
* 处理来源URL,得到URL目录和根目录
*/
private void getRootURL(){
    if(fromURL.indexOf("/", 8) > 0){
        fromURL = fromURL.substring(0, fromURL.lastIndexOf("/") + 1);
    }else{
        fromURL = fromURL + "/";
    }
    rootURL = fromURL.substring(0, fromURL.indexOf("/", 8));
}

 
把上次提取URL的方法进行改进,就完成了URL的提取,其中包括HTTP链接和图片链接。把提取出来的数据,存入URL_LIST和IMAGE_LIST容器中。
 

/**
* 通过正则表达式,提取URL
*/
private void regexURL(String code){
    Matcher urls = pattern.matcher(code);
    //System.out.println("URL_NUM:" + urls.group().length());       
    String tmpurl = "";
    boolean isImg = false;
    while(urls.find()){
        tmpurl = urls.group();
        if(tmpurl.indexOf("src=") == 0){
            isImg = true;
        }else{
            isImg = false;
        }
        tmpurl = tmpurl.substring(tmpurl.indexOf("=") + 2, tmpurl.lastIndexOf("""));
        if(isImg){
            //如果是图片,则判断图片的格式
            if(Config.IMAGE_TYPES.indexOf(tmpurl.substring(tmpurl.lastIndexOf(".") + 1)) < 0){
                continue;
            }
        }
        if(tmpurl.indexOf("http://") < 0){
            if(tmpurl.substring(0, 1).equalsIgnoreCase("/")){
                tmpurl = rootURL + tmpurl;
            }else{
                tmpurl = fromURL + tmpurl;
            }
        }           
        try {
            if(isImg){
                URLFactory.IMAGE_LIST.put(tmpurl);
            }else{
                URLFactory.URL_LIST.put(tmpurl);
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
原文地址:https://www.cnblogs.com/mnight/p/3677651.html