最近用htmlunit做网络爬虫 遇到拿不到初始化js加载的数据的问题 最近解决了 写个简单的例子

public static void main(String[] args) throws Exception {      

String url="www.xxx.com";

        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
        //设置webClient的相关参数
        webClient.setJavaScriptEnabled(true);
        webClient.setCssEnabled(false);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.setTimeout(50000);
        webClient.setThrowExceptionOnScriptError(false);
        //模拟浏览器打开一个目标网址
            HtmlPage rootPage= webClient.getPage(url);
            System.out.println("为了获取js执行的数据 线程开始沉睡等待");
            Thread.sleep(30000);//注意 这步非常重要 因为页面的初始化js加载也是需要时间的 具体时间可以自己调
            System.out.println("线程结束沉睡");

            String html = rootPage.asXml();

            System.out.println(html);

//后面是一个扩展  ,你前面的沉睡时间可以设短点 然后判断 抓过来的数据有没有你需要的 如果有  那就解析呗 我用的是Jsoup这个解析的 所需要的jar

//在我的资源里面有 地址http://download.csdn.net/detail/caiselangren/5743399     自己下了引人就行

        Document doc = Jsoup.parse(html);
        Element content = doc.getElementById("XXX");//这个是你要获取内容的ID 当然 你也可以用class或者元素名 或者name什么的去获取
        Elements Numbers = null;
        Elements Numbers_price = null;
        Elements Numbers_detail = null;
        if(content!=null){
            Numbers=content.getElementsByAttributeValue("class", "XXX");
        }else{
            //数据没获取到
            for(int i=0;i<20;i++){
                System.out.println("数据没获取到延长沉睡5秒");
                Thread.sleep(5000);
                rootPage = webClient.getPage(url);
                 doc = Jsoup.parse(rootPage.asXml());
                 content = doc.getElementById("XXX");
                 if(content!=null){
                     Numbers=content.getElementsByAttributeValue("class", "XXX");
                     break;
                 }
                 if(i==19){
                     System.out.println("数据超过查询时间,停止查询");
                 }
            }
            
        }

if(Numbers!=null){

   for(int i=0;i

Element Number = Numbers.get(i);

System.out.println(Number.html());

}

}



}

你可能感兴趣的:(数据抓取)