js 抓取网页内容(方法如下最后得到的源码:其它的代码和点击打开链接这篇文章相比几乎没变)

优采云 发布时间: 2021-10-05 09:10

  js 抓取网页内容(方法如下最后得到的源码:其它的代码和点击打开链接这篇文章相比几乎没变)

  上次不是写了一个博客访问的自动爬取(点击打开链接),但是昨晚再跑的时候,发现不能用了。.

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

  只有积分没有访问

  

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

  

  有参观。

  这也导致我的程序无法使用,需要更新。

  想想看。原因可能是后台的主机把流量放在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("http://blog.csdn.net/su20145104009?viewmode=contents");

String res=page.asText();

//处理源码

deal(res);

}

  最终的源代码如下:

  

  其他代码和这个文章相比几乎没有变化,点击打开链接。不明白的可以看这里,不再赘述。

  执行后成功写入txt文件

  

  使用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包不是一个或多个,需要批量处理。

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

  但是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 jar包下载

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线