htmlunit抓取动态网页(Java端得到的HTML文件里面没有某一段代码怎么做 )
优采云 发布时间: 2021-12-03 13:09htmlunit抓取动态网页(Java端得到的HTML文件里面没有某一段代码怎么做
)
我最近一直在抓取数据。抓取一般网页数据相对容易。今天在抓取电视猫的节目列表,发现有些数据无法抓取。Java端获取的HTML文件中没有特定的代码。我查了很多资料。,我发现是js动态生成的数据,不能直接抓取。一种解决办法是找到ajax请求地址和参数,重新爬取。这个方法有一个问题,就是当参数加密过时,这个方法不好用,所以,这里有一个方法,就是用HTMLunit来抓取(可以用jsuop处理HTML文件),jar包下载地址:(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;
}