A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ZSMAN 于 2015-5-6 11:36 编辑
  1. import java.io.*;
  2. import java.net.*;
  3. import java.util.regex.*;

  4. public class TEST {
  5.     private String url_Rege;//url规则
  6.     private String mail_Rege;//邮箱规则
  7.     static int num=2;//控制递归深度
  8.     public TEST() {
  9.         url_Rege="http://\\w+\\.\\w+\\.\\w+\\.\\w+(/\\w*)*";
  10.         mail_Rege="\\w+@\\w+(\\.\\w+)+";
  11.     }
  12.     public void getMail(String Url) throws Exception {//递归函数
  13.                 System.out.println("----------------"+num);
  14.            num--;
  15.         URL url=new URL(Url);
  16.         URLConnection conn=url.openConnection();
  17.         BufferedReader bufr=new BufferedReader(new InputStreamReader(conn.getInputStream()));
  18.         String line=null;
  19.         Pattern p=Pattern.compile(url_Rege);
  20.         Pattern p1=Pattern.compile(mail_Rege);
  21.         while((line=bufr.readLine())!=null) {
  22.                     Matcher m1=p1.matcher(line);
  23.                while(m1.find())
  24.                 System.out.println(m1.group());//输出邮箱
  25.             if(num>0) {//没达到深度时
  26.                 Matcher m=p.matcher(line);
  27.                 while(m.find()) {
  28.                     //System.out.println(m.group()+num);
  29.                       getMail(m.group());//递归
  30.                                         num++;
  31.                 }
  32.             }
  33.                
  34.         }
  35.                 bufr.close();
  36.     }
  37.     public static void main(String[] args)throws Exception {
  38.         new TEST().getMail("http://tieba.baidu.com/p/3699274777");

  39.     }
  40. }
复制代码
写了一个递归的网页邮箱爬虫demo,按层递归。思路是传入一个url,读取一行内容,找到里面的邮箱和其他url。如果有其他url,就按前面的步骤递归一次。控制递归的是一个静态成员变量。结果这个只能爬取当前页面的邮箱,有时还有服务器500异常~应该是这个递归写错了,求大神指点!!(按行读取会出现正则获取错误,请无视!)

4 个回复

倒序浏览
自己顶一个!
回复 使用道具 举报
按行读取网页html代码的方式不可取。效率且不论,万一一个邮箱或网页地址被断成2行怎么办?我知道python是有直接读取全部html的函数,java应该也有,百度一下吧
回复 使用道具 举报
fantacyleo 发表于 2015-5-6 18:19
按行读取网页html代码的方式不可取。效率且不论,万一一个邮箱或网页地址被断成2行怎么办?我知道python是 ...

我知道按行读取是不正确的,实验中已经出错了~现在的主要问题是这个递归写的不对,这个程序连截获的正确URL都读不了~~
回复 使用道具 举报
求大神帮忙改一下啊~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马