如题,详细的说就是:我搜索“java”,然后出来以很多页的结果,我现在只要前50个结果链接所对应的网页,用java实现把它们保存到自己的硬盘上。希望大侠能给出个思路,当然有算法、源代码最好了。  此致
敬礼

解决方案 »

  1.   

    补充:是要用J2SE的代码来实现,不是用J2EE中的JSP等等。
      

  2.   

    HttpURLConnection 使用GET方法即可。 注意baidu是GBK的编码类型
      

  3.   

    给你一段读取页面信息的代码吧!
    拿到信息后,用正则表达式去匹配页面链接
    然后再次调用这段代码,把链接对应的页面内容读取下来
      /**
       * 读取页面信息
       * @param page 页面的URL
       * @param charset 页面的编码类型
       * @return 页面的字符串,注意换行已经被默认去掉了,如果需要,请看代码的注释部分
       */
      public static String getPage(String page, String charset) {
        try {
          URL url = new URL(page);
          HttpURLConnection con = (HttpURLConnection) url.openConnection();
          BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
          StringBuilder b = new StringBuilder();
          String line;
          while ((line = reader.readLine()) != null) {
            b.append(line);
            // b.append("\r\n"); // 默认这里没有保存换行,而是让所有的字符出现在一行里面。如果需要,请去掉前面的注释
          }
          return b.toString();
        } catch (FileNotFoundException ex) {
          System.out.println("NOT FOUND:" + page);
          return null;
        } catch (ConnectException ex) {
          System.out.println("Timeout:" + page);
          return null;
        } catch (Exception ex) {
          ex.printStackTrace();
          return null;
        }
      }
      

  4.   

    借用下楼上老大的代码,还不够精确,还得改下正则……public static void main(String[] args) {
    String url = "http://www.baidu.com/s?wd=java";
    String str = getPage(url,"gbk");
    String reg = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">.*?" +
    "<a.*? href=\"(.*?)\".*?>(.*?)</a>.*?</table>";
    Pattern p = Pattern.compile(reg,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = p.matcher(str);
    int i = 0;
    while(m.find())
    {
    System.out.println("第"+i+"个标题:"+m.group(2).replaceAll("<.*?>", ""));
    System.out.println("第"+i+"个连接:"+m.group(1));
    i++;
    System.out.println();
    }
    } /**
     * 读取页面信息
     * @param page 页面的URL
     * @param charset 页面的编码类型
     * @return 页面的字符串,注意换行已经被默认去掉了,如果需要,请看代码的注释部分
     */
    public static String getPage(String page, String charset) {
    try {
    URL url = new URL(page);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    BufferedReader reader = new BufferedReader(new InputStreamReader(
    con.getInputStream(), charset));
    StringBuilder b = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
    b.append(line);
    b.append("\r\n"); 
    }
    return b.toString();
    } catch (FileNotFoundException ex) {
    System.out.println("NOT FOUND:" + page);
    return null;
    } catch (ConnectException ex) {
    System.out.println("Timeout:" + page);
    return null;
    } catch (Exception ex) {
    ex.printStackTrace();
    return null;
    }
    }
      

  5.   

    第一页的程序很简单,用httpclient就可以得到相应页面的东西,用split就可以得到结果。
    难在第二页啊,百度的规则是复杂的。http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=java+%B6%E0%CF%DF%B3%CC&pn=10&ver=0&cl=3
    http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=java+%B6%E0%CF%DF%B3%CC&pn=20&ver=0&cl=3
    http://www.baidu.com/s?ie=gb2312&bs=java+%B6%E0%CF%DF%B3%CC&sr=&z=&cl=3&f=8&wd=java+&ct=0
    http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=java&pn=10&ver=0&cl=3
    http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=java&pn=20&ver=0&cl=3百度是php?反正这个规则你得研究啊!
    然后response。sendredrict()。