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

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

只有积分  没有访问量了

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

有访问。

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

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

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

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

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

里面回复了好多方法  发现有个htmlunit  于是就自己测试一下
发现真的可以。得到了js执行后的源码。
废话不说了。
方法如下
  1. public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
  2. // TODO Auto-generated method stub
  3. WebClient wc=new WebClient(BrowserVersion.FIREFOX_24);
  4. wc.setJavaScriptTimeout(5000);
  5. wc.getOptions().setUseInsecureSSL(true);//接受任何主机连接 无论是否有有效证书
  6. wc.getOptions().setJavaScriptEnabled(true);//设置支持javascript脚本
  7. wc.getOptions().setCssEnabled(false);//禁用css支持
  8. wc.getOptions().setThrowExceptionOnScriptError(false);//js运行错误时不抛出异常
  9. wc.getOptions().setTimeout(100000);//设置连接超时时间
  10. wc.getOptions().setDoNotTrackEnabled(false);
  11. HtmlPage page=wc.getPage("http://blog.csdn.net/su20145104009?viewmode=contents");
  12. String res=page.asText();
  13. //处理源码
  14. deal(res);
  15. }

最后得到的源码如下:

其它的代码和点击打开链接 这篇文章相比几乎没变。如果不明白 可以去看一下  这里就不再赘述了
 
执行后  成功写入到txt文档
使用了htmlunit会弹出好多异常警告
加上这些代码  就会消失了~
  1. LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",    "org.apache.commons.logging.impl.NoOpLog");
  2. java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
  3. .setLevel(Level.OFF);
  4. java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
  5. .setLevel(Level.OFF);

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

而且要引入的jar包也不是一个  是多个  所以要批量处理了
首先我们要把所有要用的jar包 使用-cp命令导入。
可是htmlunit的jar包太多了  所以想到一个方法  使用for循环遍历htmlunit文件夹里面的jar文件  将其处理为一个字符串 然后再使用-cp命令 全部代码如下
  1. echo off
  2. setlocal enabledelayedexpansion
  3. ::定义一个字符串
  4. set str=
  5. ::遍历htmlunit文件夹
  6. for /f "delims=" %%a in ('dir /b "E:\lib\htmlunit-2.14-bin\lib\*.jar"') do (
  7. set "str=!str!E:\lib\htmlunit-2.14-bin\lib\%%a;"
  8. )
  9. echo on
  10. e:
  11. javac -cp .;%str% AutoMarkBlogView.java
  12. java -cp .;%str% AutoMarkBlogView
  13. pause

运行结果如下:

 

htmlunit抓取js执行后的网页源码的更多相关文章

  1. java_爬虫_获取经过js渲染后的网页源码

    md 弄了一天了……(这个月不会在摸爬虫了,浪费生命) 进入正题: 起初是想写一个爬虫来爬一个网站的视频,但是怎么爬取都爬取不到,分析了下源代码之后,发现源代码中并没有视频的dom 但是在浏览器检查元 ...

  2. java抓取东方财富股票数据(附源码)

    背景 前段时间给朋友写了一个自动抓取同花顺股票数据的程序,不少人觉得不错. 这几天后台有粉丝给我留言让我也抓一下东方财富的数据,说东方财富的数据特别难抓,我还真不一定能搞得定. 本来我是一个德艺双磬且 ...

  3. 如何用phantomjs去抓取js渲染后的页面

    1.安装phantomjs 网上有很多. 2.执行官网上的示例代码 // Read the Phantom webpage '#intro' element text using jQuery and ...

  4. Java使用HtmlUnit抓取js渲染页面

    需求: 需要采集js渲染的页面,有些网站的页面是js渲染的 实现: 基于HtmlUnit实现: public static void getAjaxPage() throws Exception{ W ...

  5. 使得fiddler来抓包查看微信浏览器的网页源码

    需要工具:http://www.telerik.com/fiddler 下载安装后 第二步: 打开这个选项: 设置代理:allow remote computer to connect  端口为888 ...

  6. 抓取Js动态生成数据且以滚动页面方式分页的网页

    代码也可以从我的开源项目HtmlExtractor中获取. 当我们在进行数据抓取的时候,如果目标网站是以Js的方式动态生成数据且以滚动页面的方式进行分页,那么我们该如何抓取呢? 如类似今日头条这样的网 ...

  7. 如何用python抓取js生成的数据 - SegmentFault

    如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...

  8. Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...

  9. sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取

    原文:sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 在多人开发中最头疼的是人少事多没有时间进行codereview,本来功能都没时间写,哪有时间来开会细细来分析代码.软件能跑就行, ...

随机推荐

  1. HDOJ-2034

    人见人爱A-B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  2. webpack内置模块ProvidePlugin

    webpack配置ProvidePlugin后,在使用时将不再需要import和require进行引入,直接使用即可. 使用方法: 在webpack.dev.conf.js和webpack.prod. ...

  3. html实现点击图片放大功能

    话不多说,直接上代码 <html> <head> <style> .over {position: fixed; left:0; top:0; width:100% ...

  4. hrbust1444 逃脱 【BFS】

    Description  这是mengxiang000和Tabris来到幼儿园的第四天,幼儿园老师在值班的时候突然发现幼儿园某处发生火灾,而且火势蔓延极快,老师在第一时间就发出了警报,位于幼儿园某处的 ...

  5. Unity3D脚本:更改脚本和类名,且不破坏现有脚本引用的方法

    Unity开发过程中,难免遇到需要修改类名(以及对应脚本名)的时候,但如果草率地在MonoDevelop里把类名直接改掉,会破坏现有场景以 及Project Assets中所有引用该脚本的链接,届时还 ...

  6. windows7任务管理器内存相关列详细解释

    内存 - 工作集:私人工作集中的内存数量与进程正在使用且可以由其他进程共享的内存数量的总和.  内存 - 峰值工作集:进程所使用的工作集内存的最大数量.  内存 - 工作集增量:进程所使用的工作集内存 ...

  7. Django框架简介,wsgiref 与 jinja2 模块

    目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...

  8. 用EnumMap代替序数索引

    用EnumMap代替序数索引   有时候,会见到利用ordinal方法来索引数组的代码.例如下面这个简化的类,表示一种烹饪用的香草: public class Herb { public enum T ...

  9. (转)关于MongoDB你需要知道的几件事

    本文列举了颇让作者困惑的一些MongoDB限制,如果你也打算使用MongoDB,那么至少要提前了解这些限制,以免遇到的时候措手不及. 消耗磁盘空间 这是我的第一个困惑:MongoDB会消耗太多的磁盘空 ...

  10. MyBatis逆向工程中domainObjectRenamingRule报错或无效

    使用domainObjectRenamingRule报错 在使用MyBatis逆向工程时报错如下: org.mybatis.generator.exception.XMLParserException ...