本帖最后由 ZSMAN 于 2015-5-6 11:36 编辑
- import java.io.*;
- import java.net.*;
- import java.util.regex.*;
- public class TEST {
- private String url_Rege;//url规则
- private String mail_Rege;//邮箱规则
- static int num=2;//控制递归深度
- public TEST() {
- url_Rege="http://\\w+\\.\\w+\\.\\w+\\.\\w+(/\\w*)*";
- mail_Rege="\\w+@\\w+(\\.\\w+)+";
- }
- public void getMail(String Url) throws Exception {//递归函数
- System.out.println("----------------"+num);
- num--;
- URL url=new URL(Url);
- URLConnection conn=url.openConnection();
- BufferedReader bufr=new BufferedReader(new InputStreamReader(conn.getInputStream()));
- String line=null;
- Pattern p=Pattern.compile(url_Rege);
- Pattern p1=Pattern.compile(mail_Rege);
- while((line=bufr.readLine())!=null) {
- Matcher m1=p1.matcher(line);
- while(m1.find())
- System.out.println(m1.group());//输出邮箱
- if(num>0) {//没达到深度时
- Matcher m=p.matcher(line);
- while(m.find()) {
- //System.out.println(m.group()+num);
- getMail(m.group());//递归
- num++;
- }
- }
-
- }
- bufr.close();
- }
- public static void main(String[] args)throws Exception {
- new TEST().getMail("http://tieba.baidu.com/p/3699274777");
- }
- }
复制代码 写了一个递归的网页邮箱爬虫demo,按层递归。思路是传入一个url,读取一行内容,找到里面的邮箱和其他url。如果有其他url,就按前面的步骤递归一次。控制递归的是一个静态成员变量。结果这个只能爬取当前页面的邮箱,有时还有服务器500异常~应该是这个递归写错了,求大神指点!!(按行读取会出现正则获取错误,请无视!)
|
|