本帖最后由 luisszhou 于 2009-08-11 01:44:09 编辑

解决方案 »

  1.   

    把html页取下来,数据在"#xmldso"指定的位置,也取下来,就是全部内容了。和分页关系不大.
      

  2.   

    利用htmlparser抓取网页内容(一) 
    import org.htmlparser.Node;
    import org.htmlparser.NodeFilter;
    import org.htmlparser.Parser;
    import org.htmlparser.filters.TagNameFilter;
    import org.htmlparser.tags.TableTag;
    import org.htmlparser.util.NodeList;/**
     * <br>
     * 标题: <br>
     * 功能概要: <br>
     * 版权: cityyouth.cn (c) 2005 <br>
     * 公司:上海城市青年网 <br>
     * 创建时间:2005-12-21 <br>
     * 修改时间: <br>
     * 修改原因:
     * 
     * @author 张伟
     * @version 1.0
     */
    public class TestYahoo {
        public static void testHtml() {
            try {
                String sCurrentLine;
                String sTotalString;
                sCurrentLine = "";
                sTotalString = "";
                java.io.InputStream l_urlStream;
                java.net.URL l_url = new java.net.URL(
                        "http://sports.sina.com.cn/iframe/nba/live/");
                java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url
                        .openConnection();
                l_connection.connect();
                l_urlStream = l_connection.getInputStream();
                java.io.BufferedReader l_reader = new java.io.BufferedReader(
                        new java.io.InputStreamReader(l_urlStream));
                while ((sCurrentLine = l_reader.readLine()) != null) {
                    sTotalString += sCurrentLine;
                }
                System.out.println(sTotalString);            System.out.println("====================");
                String testText = extractText(sTotalString);
                System.out.println(testText);
            } catch (Exception e) {
                e.printStackTrace();
            }    }    /**
         * 抽取纯文本信息
         * 
         * @param inputHtml
         * @return
         */
        public static String extractText(String inputHtml) throws Exception {
            StringBuffer text = new StringBuffer();        Parser parser = Parser.createParser(new String(inputHtml.getBytes(),
                    "8859_1"), "8859-1");
            // 遍历所有的节点
            NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter() {
                public boolean accept(Node node) {
                    return true;
                }
            });
            Node node = nodes.elementAt(0);
            text.append(new String(node.toPlainTextString().getBytes("8859_1")));
            return text.toString();
        }    /**
         * 读取文件的方式来分析内容. filePath也可以是一个Url.
         * 
         * @param resource
         *            文件/Url
         */
        public static void test5(String resource) throws Exception {
            Parser myParser = new Parser(resource);        // 设置编码
            myParser.setEncoding("GBK");
            String filterStr = "table";
            NodeFilter filter = new TagNameFilter(filterStr);
            NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
            TableTag tabletag = (TableTag) nodeList.elementAt(11);
                
                System.out.println(tabletag.toHtml());
                
                System.out.println("==============");    }    /*
         * public static void main(String[] args) { TestYahoo testYahoo = new
         * TestYahoo(); testYahoo.testHtml(); }
         */
        public static void main(String[] args) throws Exception {
            test5("http://sports.yahoo.com/nba/scoreboard");
        }
    }
      

  3.   

    ConnectionManager cm = new ConnectionManager(); 
    cm.setProxyHost("XXX.XXX.XXX.XXX"); 
    cm.setProxyPort(8080);
      

  4.   

    如果数据是一次下载下来,JS只是分页的话,那还可以获取如果是用AJAX,点一次下载一次数据,那就不好办了。
    提供2个思路:
    1.分析它的JS,自己发送信息到服务器,从返回数据里取
    2.创建一个类似.NET里webbrowser的对象,用它打开那个网页,模拟点击下一页,然后再获取信息
      

  5.   

    另外,打开网页速度慢,但是点击“下一页”翻页速度很快,每页20条记录,可以看出如楼上 iroyal 所言,“数据是一次性获取的,JS只是分页”。还请大家赐教,该怎么得到这个“一次性获取”的数据呢。