java 爬虫 js_java_爬虫_获取经过js渲染后的网页源码

本文介绍了如何通过Java的HtmlUnit库来抓取经过JavaScript渲染后的网页源码,详细阐述了配置WebClient的过程,包括启用JavaScript支持、设置超时时间,并通过线程等待确保页面完全渲染。示例代码展示了如何获取指定网页的XML源码。
摘要由CSDN通过智能技术生成

md

弄了一天了……(这个月不会在摸爬虫了,浪费生命)

进入正题:

起初是想写一个爬虫来爬一个网站的视频,但是怎么爬取都爬取不到,分析了下源代码之后,发现源代码中并没有视频的dom

但是在浏览器检查元素的时候又是有的,这就让我很难过了

百度了一大天,发现是因为普通方法获取的只是服务器端本地的静态资源,也就是第一手资源

而浏览器检查元素的资源是经过js渲染后的代码

所以就要想办法去获得渲染后的代码

在看了若干个帖子之后……外加上一个httpclient课程和另一个htmlunit课程……

终于,在看完一个帖子后,知道了怎么获取渲染后网页的代码

首先,httpclient是普通httlurlConnection的升级版,可以模拟浏览器以防止被服务器封杀

但是抓取的源代码是静态的一手源代码,没有经过js渲染后的内容

所以就需要htmlunit工具,来让页面经过渲染,然后获取源代码

htmlunit的主要功能就是模拟人工操作页面内的元素,由于没有gui,所以要比普通操作要快,但是实际操作后发现还是需要肉眼可见的时间

具体两个工具的jar包在哪儿下载不在这赘述,相信看到这篇文章的人都应该知道在那里获取资源

下面直接贴上源码,具体语句含义在注释中有

源代码如下:

importjava.io.IOException;importjava.net.MalformedURLException;importcom.gargoylesoftware.htmlunit.BrowserVersion;importcom.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;importcom.gargoylesoftware.htmlunit.WebClient;importcom.gargoylesoftware.htmlunit.html.HtmlPage;public classHtmlUnit {public static voidmain(String[] args) {

WebClient webClient= newWebClient(BrowserVersion.FIREFOX_52);//模拟火狐浏览器try{//HtmlPage page = webClient.getPage("http://www.baidu.com");//webClient.getOptions().setCssEnabled(false);//webClient.getOptions().setJavaScriptEnabled(false);

webClient.setJavaScriptTimeout(5000);

webClient.getOptions().setUseInsecureSSL(true);//接受任何主机连接 无论是否有有效证书

webClient.getOptions().setJavaScriptEnabled(true);//设置支持javascript脚本

webClient.getOptions().setCssEnabled(false);//禁用css支持//webClient.getOptions().set

webClient.getOptions().setThrowExceptionOnScriptError(false);//js运行错误时不抛出异常

webClient.getOptions().setTimeout(100000);//设置连接超时时间

webClient.getOptions().setDoNotTrackEnabled(false);//HtmlPage page = webClient.getPage("http://blog.csdn.net/su20145104009?viewmode=contents");

HtmlPage page = webClient.getPage("http://www.enmeiyiyuan.com/look-5bf3f60b83145.html");//String res=page.asText();

Thread.sleep(3000);

System.out.println(page.asXml());

}catch(FailingHttpStatusCodeException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}catch(MalformedURLException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}catch(IOException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}catch(InterruptedException e) {//TODO 自动生成的 catch 块

e.printStackTrace();

}finally{

webClient.close();

}

}

}

那些注释掉的是之前尝试的……

然后一定要注意加上线程等待时间,不然获取的大概率还是第一手代码,因为js渲染需要时间,这里是等待了三秒,然后成功获取经过处理的源码

希望对大家有所帮助

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值