黑马程序员技术交流社区

标题: 写的网页爬虫运行爆异常,求解 [打印本页]

作者: 田建    时间: 2012-6-22 09:42
标题: 写的网页爬虫运行爆异常,求解
本帖最后由 田建 于 2012-6-24 07:48 编辑

直接上代码
  1. import java.net.*;
  2. import java.io.*;
  3. import java.util.regex.*;
  4. class RegexTest_2
  5. {
  6. public static void main(String[] args)throws Exception
  7. {
  8. getMails();
  9. }
  10. public static void getMails()throws Exception
  11. {
  12. URL url=new URL("http://www.baidu.com/s?wd=%D3%CA%CF%E4%B5%D8%D6%B7&tn=your_pg");
  13. URLConnection conn=url.openConnection();
  14. BufferedReader bufr=new BufferedReader(new InputStreamReader(conn.getInputStream()));
  15. String line=null;
  16. String mailreg="\\w+@\\w+(\\.\\w+)+";
  17. Pattern p=Pattern.compile(mailreg);
  18. while((bufr.readLine())!=null)
  19. {
  20. Matcher m=p.matcher(line);
  21. while(m.find())
  22. {
  23. System.out.println(m.group());
  24. }

  25. }
  26. }
  27. }
复制代码
不知啥问题!

`F)DJOS1KZXE)C[0@[U$~~C.jpg (33.48 KB, 下载次数: 23)

`F)DJOS1KZXE)C[0@[U$~~C.jpg

作者: 丁二跃    时间: 2012-6-22 10:10
本帖最后由 丁二跃 于 2012-6-22 10:14 编辑

这个异常很好找啊。空指针异常:先看爆出异常的最后一行,可以看出异常在main方法,代码第8行。第8行调用getMails()方法。再看异常倒数第二行,显示错误在第20行,然后就可以仔细查看代码了。你会发现你的line没有被赋值,只在第15行进行了初始化。{:soso_e113:}

查找异常应该先从上面往下找,上面的总是先出错的地方,下面的异常可能是由上面引起的。先看最上面是什么异常,然后再看该异常的信息。此时应该从下面开始看,从大范围一级级定位到具体出错位置。
作者: 黑马—陈磊    时间: 2012-6-22 10:33
本帖最后由 黑马—陈磊 于 2012-6-22 10:38 编辑

public static void getMails() throws Exception

        {

                URL url = new URL(
                                "http://www.baidu.com/s?wd=%D3%CA%CF%E4%B5%D8%D6%B7&tn=your_pg");

                URLConnection conn = url.openConnection();

                BufferedReader bufr = new BufferedReader(new InputStreamReader(conn
                                .getInputStream()));

                String line = null;

                String mailreg = "\\w+@\\w+(\\.\\w+)+";

                Pattern p = Pattern.compile(mailreg);

                while ((line=bufr.readLine()) != null)      // 读取返回的字符串没有赋给line ,所以line为null,报了空指针异常  ,这样修改就可以了    

                {

                        Matcher m = p.matcher(line);

                        while (m.find())

                        {

                                System.out.println(m.group());

                        }

                }

        }
结果:

作者: 陈少文    时间: 2012-6-22 11:16
呵呵,楼主正在学习正则表达式RegularExpressions
我把它叫:字符串处理利器

原理:
1.定义一模式
用到类:java.util.regex.Pattern;
2.匹配
用到类:java.util.regex.Mather;

我自己写了一个是查找本地网页的


/*
  查找网页中Email地址
  用到正则表达式
  */

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailSpider {

public static void main(String[] args)
{
       //用BufferedReader目的读取一行
       try {
            BufferedReader
  
            br = new BufferedReader(new FileReader("c:\\20120621.html"));
  
           String line = null;

            while((line = br.readLine())!= null)           //楼主这个地方改一下,就ok了
             {
                 parse(line);
   
            }
             } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                       e1.printStackTrace();

              } catch (IOException e) {
                           // TODO Auto-generated catch block
                        e.printStackTrace();
          }
         }
private static void parse(String line)
{
         //建立模式
         Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
       //匹配
         Matcher m = p.matcher(line);
  
        while(m.find())
       {
            System.out.println(m.group());
       }
  
      }

   }


有许多人一起在做同一件事,呵呵

作者: 田建    时间: 2012-6-22 11:37
丁二跃 发表于 2012-6-22 10:10
这个异常很好找啊。空指针异常:先看爆出异常的最后一行,可以看出异常在main方法,代码第8行。第8行调用ge ...

多谢!!是我疏忽了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2