zoukankan      html  css  js  c++  java
  • 使用Jsoup和htmlunit爬取动态网页

      在对http://zkgg.tjtalents.com.cn/newzxxx.jsp这个网页爬取内容时,如果只使用Jsoup进行解析的话,起内部的a href标签内容无法获取到。

     

     但是实际上通过

    Document doc = Jsoup.connect(url).get();

    获取到的文档只是newzxxx.jsp中respose的内容。

     实际我们想要的内容通过js加载得到的。

    function query(){
       $("formzx").fid.value = "C09.01.01.05";
        $("formzx").set('send',{
            url: 'MainServlet.action', 
            onRequest: function(){
            },
            //成功的回调函数
            onSuccess: function(responseText){  
              $('listspan').innerHTML = responseText;
            },
            //失败的回调函数. 404. 500. 以及返回JSON串success为false时执行
            onFailure: function(responseText){
              $('listspan').innerHTML = responseText;
             }
          });
        $("formzx").send();
      }

    所以这种情况我们可以使用htmlunit来模拟浏览器,并且等待js加载完毕后,再读取整个页面。

    public String getPageWaitJS (String url) throws IOException {
            WebClient webClient = new WebClient();
            webClient.getOptions().setJavaScriptEnabled(true); //启用JS解释器,默认为true
            webClient.getOptions().setCssEnabled(false); //禁用css支持
            webClient.getOptions().setThrowExceptionOnScriptError(false); //js运行错误时,是否抛出异常
            HtmlPage page = webClient.getPage(url);
            webClient.waitForBackgroundJavaScript(3*1000);
            String pageXml = page.asXml(); //以xml的形式获取响应文本
            return pageXml;
        }

    这样的话就能够获取全部的html页面,之后再使用Jsoup来对页面进行解析即可,这里就不放上Jsoup的代码了。

  • 相关阅读:
    P3015 [USACO11FEB]最好的括号Best Parenthesis
    P1944 最长括号匹配_NOI导刊2009提高(1)
    P2328 [SCOI2005]超级格雷码
    P2308 添加括号
    P5657 格雷码【民间数据】
    P2196 挖地雷
    P5020 货币系统
    括号序列模型--序列dp--U86873 小Y的精灵国机房之旅
    P1033 自由落体
    P1017 进制转换
  • 原文地址:https://www.cnblogs.com/silentteller/p/13373304.html
Copyright © 2011-2022 走看看