抓取js动态生成数据

  最近在抓数据,一般的网页数据抓取相对容易一些,今天在抓电视猫的节目单,发现有些数据时抓取不到的,Java端得到的HTML文件里面没有某一段代码,查了很多资料,发现说是js动态生成的数据,无法直接抓取,有一种解决方法是利用找到ajax请求地址和参数,重新抓取,该方法存在一个问题,就是当参数被加密过时,该方法就不好用了,所以,这里用了一个办法,就是利用HTMLunit来抓取(可以利用jsuop来处理HTML文件),jar包下载地址:http://download.csdn.net/detail/joy460154849/9822849(HTMLunit所用到的jar包全部导入后,稍微调整一下,因为有些有重复导入或者版本问题)代码如下:

public static String  getHtml(String url){
        // 模拟一个浏览器  
        @SuppressWarnings("resource")
        WebClient webClient = new WebClient();  
        //webclient参数载体  
        WebClientOptions clientOptions = webClient.getOptions();  
        // 设置webClient的相关参数  
        clientOptions.setJavaScriptEnabled(true);  
        clientOptions.setCssEnabled(false);  
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());  
        clientOptions.setTimeout(35000);  
        clientOptions.setThrowExceptionOnScriptError(false);  
        // 模拟浏览器打开一个目标网址  
        HtmlPage rootPage = null;
        try {
            rootPage = webClient.getPage(html);
        } catch (FailingHttpStatusCodeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
  
        //保存页面  
        //rootPage.save(new File("/home/share/Test/1"));  
          
        //body html信息  
        HtmlElement htmlElement = rootPage.getBody();  
        String xmlContent = htmlElement.asXml();  
        return xmlContent;
    }  

 

转载于:https://www.cnblogs.com/lixiuming521125/p/6752367.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值