<li class="unit"><a href="/ilist/list" class="t" boss="btnViewMyList" rel="http://1.t.qq.com/asyn/list.php" type="list"><span class="text">名单</span></a></li>从这句中
(1)如何提取出"名单"对应的url
(2)如何获取名单这个页面所对应的源码
希望做过的朋友能给出写思路!谢谢!

解决方案 »

  1.   

    (1) 有两种做法:
    可以直接用字符串截取(正则或indexOf都行)出所有的 <a> 标签,然后再检查是否包含 “名单” 二字;
    也可以直接用HTML解析器将其转换为文档对象,然后就直接按Element来检索。(2) 一般直接用HttpClient模拟浏览器去访问该URL地址,就能得到所有代码了。
      

  2.   

    关于第一个“提取”的问题,给你个参考:
            String html="<li class=\"unit\"><a href=\"/ilist/list\" class=\"t\" boss=\"btnViewMyList\" rel=\"http://1.t.qq.com/asyn/list.php\" type=\"list\"><span class=\"text\">名单</span></a></li>";
            Pattern p = Pattern.compile("<a\\s.*?href=\"([^\"]*)(.*?)</a>", Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(html);
            while (m.find()) {
                if (m.group(2).indexOf("名单")>= 0) {
                    System.out.println("HREF: " + m.group(1) + "\t\tWITH: " + m.group(2));
                }
            }
    循环中“m.group(1)”,就是你要的URL地址了。
      

  3.   

    用HttpClient能不能解决,得到的源码和通过“右键”-->“查看源码”得到的源码不相同的问题。
    我同通过Socket得到的网页的源码和“右键”-->“查看源码得到的源码不同,这个问题该怎么解决!
      

  4.   

    哥门,你是想点击“名单”这个span标签的时候获取外层a标签的url,还是想怎样获取?如果单是想点击a标签获得url,然后根据获得所对应的源码的话,可以用ajax的方式,写一个servlet,将url作为参数传到servlet,然后在servlet中使用网络流的方式获得该url的源码,比如:
    URL url = new URL("http://xxxx:xxxx/ilist/list");
    InputStream is = url.openStream();
    BufferedReader bufr = new BufferedReader(new InputStreamReader(is));
    String line = null;
    while((line = bufr.readLine()) != null) {
    System.out.println(line);
    }
      

  5.   

    谢谢啊!我也是用这种方法去获取url的源码的。但是不知道你试过没有,用这种方法去获取“腾讯微博”的首页中,“名单”和“全部广播”的源码时,虽然他们的url不同但是却得到的是相同的源码。我是想提取我所关注的人的动态,但是通过“名单”的url得到的源码中没有关注的人的动态。这是为什么?
      

  6.   

    真的很谢谢!我是通过这种方法去获取一个url的源码的
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    public class test1 {    public static void main(String[] a) throws IOException {
             String url = "http://t.qq.com/WGZJ281929938?pgv_ref=im.perinfo.perinfo.icon&ptlang=2052#!/list/qqfriends/5";
             System.out.println(getHTML(url, "UTF-8")); // 使用原网页里声明的gb2312反而会出现乱码
          }
     
         public static String getHTML(String pageURL, String encoding) {
     
             StringBuilder pageHTML = new StringBuilder();
     
             try {
     
                 URL url = new URL(pageURL);
     
                 HttpURLConnection connection = (HttpURLConnection) url
                         .openConnection();
     
                 connection.setRequestProperty("User-Agent", "MSIE 7.0");
     
                 BufferedReader br = new BufferedReader(new InputStreamReader(
                         connection.getInputStream(), encoding));
     
                 String line = null; 
     
                 while ((line = br.readLine()) != null) {
     
                     pageHTML.append(line);
     
                     pageHTML.append("\r\n");
     
                 }
     
                 connection.disconnect();
     
             } catch (Exception e) {
     
                 e.printStackTrace();
     
             }
     
             return pageHTML.toString();
     
         }
     }我是想去获取腾讯微博里面首页中“名单”对应的源代码的,可是得到的与“全部广播”对应的源码相同,好像是通过不同的url得到的源码时相同的。我是想提取出“名单”中的动态的,可是得到的源码中中却没有对应的动态。