抓取动态网页(不到js加载后渲染的结果,支持ajax,并且设置了js执行的等待时间(组图))

优采云 发布时间: 2021-10-31 14:01

  抓取动态网页(不到js加载后渲染的结果,支持ajax,并且设置了js执行的等待时间(组图))

  爬取某个站点的内容时,没有得到js加载后的渲染结果,但是也设置了支持js,支持ajax,设置了js执行的等待时间。它仍然不可用。

  查看控制台打印的异常信息,在参数列表(************.js #32)之后发现页面js:missing)异常;而这个js加载了需要抓取的部分。查看32行,控制台打印的位置内容大致如下:

  $('#news_pbl').masonry().masonry('reload');//

  可以看出因为乱码,这部分没有换行,导致下面])被注释掉,导致js代码错误,无法加载内容。

  所以尝试修改js代码,使其正常执行。

  搜索后:

  webClient.setWebConnection(

new WebConnectionWrapper(wc) {

public WebResponse getResponse(WebRequest request) throws IOException {

WebResponse response = super.getResponse(request);

if (request.getUrl().toExternalForm().contains("bfdata.js")) {//bfdata.js是需要修改编码的js,你可以修改该处逻辑

String content = response.getContentAsString("GBK");

WebResponseData data = new WebResponseData(content.getBytes("UTF-8"),

response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());

response = new WebResponse(data, request, response.getLoadTime());

}

return response;

}

}

);

  webClient 对象是一个实例化的 WebClient,可以调试看看使用的是哪种编码。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线