0
点赞
收藏
分享

微信扫一扫

htmlunit抓取js执行后的网页源码


上次我不是写了一个自动抓取博客访问量吗 (点击打开链接) 可是昨天晚上我又运行的时候,发现不能用了。。

运行了几次 发现使用URLConnection 得到的网页源码和浏览器直接查看的不同。 URLConnection 使用IO流读取到的源码

只有积分  没有访问量了

htmlunit抓取js执行后的网页源码_爬虫

而使用浏览器访问 直接查看源码

htmlunit抓取js执行后的网页源码_bat批处理_02

有访问。

这也就导致了我的程序不能用了  需要更新了

 

想想原因   可能是幕后主使人把访问量放在了js里面   动态展示,而我使用URLConnection 访问的静态界面  确确实实没有收到。

于是开始百度了  百度过来 百度过去。。

发现了一个回复了三年还没有结贴的帖子

 

java爬虫项目,如何获取js执行后的完整网页源代码?  


里面回复了好多方法  发现有个htmlunit  于是就自己测试一下


发现真的可以。得到了js执行后的源码。


废话不说了。


方法如下


public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
// TODO Auto-generated method stub
WebClient wc=new WebClient(BrowserVersion.FIREFOX_24);
wc.setJavaScriptTimeout(5000);
wc.getOptions().setUseInsecureSSL(true);//接受任何主机连接 无论是否有有效证书
wc.getOptions().setJavaScriptEnabled(true);//设置支持javascript脚本
wc.getOptions().setCssEnabled(false);//禁用css支持
wc.getOptions().setThrowExceptionOnScriptError(false);//js运行错误时不抛出异常
wc.getOptions().setTimeout(100000);//设置连接超时时间
wc.getOptions().setDoNotTrackEnabled(false);
HtmlPage page=wc.getPage

String res=page.asText();
//处理源码
deal(res);

}


最后得到的源码如下:



htmlunit抓取js执行后的网页源码_html_03


其它的代码和 点击打开链接 这篇文章相比几乎没变。如果不明白 可以去看一下  这里就不再赘述了


 


执行后  成功写入到txt文档



htmlunit抓取js执行后的网页源码_html_04


使用了htmlunit会弹出好多异常警告


加上这些代码  就会消失了~


LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",    "org.apache.commons.logging.impl.NoOpLog");

java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
.setLevel(Level.OFF);

java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
.setLevel(Level.OFF);


由于我们在这里 引入了htmlunit 的jar包  .那么再用上次的脚本批量处理 就行不通了 ~


而且要引入的jar包也不是一个  是多个  所以要批量处理了


首先我们要把所有要用的jar包 使用-cp命令导入。


可是htmlunit的jar包太多了  所以想到一个方法  使用for循环遍历htmlunit文件夹里面的jar文件  将其处理为一个字符串 然后再使用-cp命令 全部代码如下


echo off
setlocal enabledelayedexpansion
::定义一个字符串
set str=
::遍历htmlunit文件夹
for /f "delims=" %%a in ('dir /b "E:\lib\htmlunit-2.14-bin\lib\*.jar"') do (
set "str=!str!E:\lib\htmlunit-2.14-bin\lib\%%a;"
)
echo on
e:
javac -cp .;%str% AutoMarkBlogView.java
java -cp .;%str% AutoMarkBlogView
pause



htmlunit抓取js执行后的网页源码_html_05


 


 


​​htmlunit jar包下载​​


 


举报

相关推荐

0 条评论