自己圈养小爬虫(三)——提取链接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(); } } }