在这里就懒得处理异常,代码很简单,看注释
package test;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class GetUrl {
public static List getUrl(String uri) throws Exception{
List list=new ArrayList<>();//用list来存放地址
URL url=new URL(uri);
String protocol=url.getProtocol();//获取协议
String host=url.getHost();//获取域名
Document doc=Jsoup.connect(uri).get();//dom解析html
Elements ele=doc.getElementsByTag("a");//获取网页中的a标签
for(Element a:ele){//遍历
String href=a.attr("href");
/**
* a标签中有四种值,需要判断,例如:
* 1.只有路径:/citylist.html
* 2.含有js代码:javascript:void(0)
* 3.网址全称:http://www.xuecheyi.com/Info/List-83.html
* 4.没有后缀/Info
*
*/
String reg="[a-zA-z]+://[^\\s]*";
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(href);
if(m.find()){//通过正则表达式匹配了第三种http://jx.xuecheyi.com/member/login/index
list.add(href);
}else if(href.indexOf("/")==0){//匹配第一四两种
/**
* /login/ind
* 0123456789
* 匹配出来的地址需要在前面加上协议和域名
*/
list.add(protocol+"://"+host+href);
}
}
return list;
}
}
从main方法读取
package test;
import java.util.Iterator;
import java.util.List;
public class TestPc {
public static void main(String[] args) throws Exception {
String uri="http://www.xuecheyi.com/Info/show-27818.html";
//Util.DownLoadPage(uri);
List list=GetUrl.getUrl(uri);
Iterator it=list.iterator();
while(it.hasNext()){
uri=(String)it.next();
System.out.println(uri);
}
}
}
效果图: