下面以获取指定网页源码中的所有超链接为例:
package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 获得指定网页的所有超链接
*/
public class 网络爬虫测试 {
//返回urlStr对应网页的所有源代码, 第二个参数表示采用的编码集
public static String getURlContent(String urlStr, String charset){
StringBuilder sb = new StringBuilder();
try {
URL url = new URL(urlStr);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(charset)));
String temp = "";
while((temp=reader.readLine())!=null){
sb.append(temp);
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
//返回与正则表达式匹配后的结果
public static List<String> getMatherSubstrs(String destStr, String regexStr ){
Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(destStr);
List<String> result = new ArrayList<String>();
while(m.find()){
result.add(m.group(1));
}
return result;
}
public static void main(String[] args) {
String destStr = getURlContent("http://www.163.com","gbk");
System.out.println(destStr);
List<String> result = getMatherSubstrs(destStr, "href=\"(.+?)\"");
for (String str : result) {
System.out.println(str);
}
}
}
可以对获得的连接继续进行正则表达式的匹配,来获取自己想要的信息。