htmlunit抓取js执行后的网页源码
上次我不是写了一个自动抓取博客访问量吗 (点击打开链接) 可是昨天晚上我又运行的时候,发现不能用了。。
运行了几次 发现使用URLConnection 得到的网页源码和浏览器直接查看的不同。 URLConnection 使用IO流读取到的源码
只有积分 没有访问量了
而使用浏览器访问 直接查看源码
有访问。
这也就导致了我的程序不能用了 需要更新了
想想原因 可能是幕后主使人把访问量放在了js里面 动态展示,而我使用URLConnection 访问的静态界面 确确实实没有收到。
于是开始百度了 百度过来 百度过去。。
发现了一个回复了三年还没有结贴的帖子
java爬虫项目,如何获取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);
- }
最后得到的源码如下:
- 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包 .那么再用上次的脚本批量处理 就行不通了 ~
- 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执行后的网页源码的更多相关文章
- java_爬虫_获取经过js渲染后的网页源码
md 弄了一天了……(这个月不会在摸爬虫了,浪费生命) 进入正题: 起初是想写一个爬虫来爬一个网站的视频,但是怎么爬取都爬取不到,分析了下源代码之后,发现源代码中并没有视频的dom 但是在浏览器检查元 ...
- java抓取东方财富股票数据(附源码)
背景 前段时间给朋友写了一个自动抓取同花顺股票数据的程序,不少人觉得不错. 这几天后台有粉丝给我留言让我也抓一下东方财富的数据,说东方财富的数据特别难抓,我还真不一定能搞得定. 本来我是一个德艺双磬且 ...
- 如何用phantomjs去抓取js渲染后的页面
1.安装phantomjs 网上有很多. 2.执行官网上的示例代码 // Read the Phantom webpage '#intro' element text using jQuery and ...
- Java使用HtmlUnit抓取js渲染页面
需求: 需要采集js渲染的页面,有些网站的页面是js渲染的 实现: 基于HtmlUnit实现: public static void getAjaxPage() throws Exception{ W ...
- 使得fiddler来抓包查看微信浏览器的网页源码
需要工具:http://www.telerik.com/fiddler 下载安装后 第二步: 打开这个选项: 设置代理:allow remote computer to connect 端口为888 ...
- 抓取Js动态生成数据且以滚动页面方式分页的网页
代码也可以从我的开源项目HtmlExtractor中获取. 当我们在进行数据抓取的时候,如果目标网站是以Js的方式动态生成数据且以滚动页面的方式进行分页,那么我们该如何抓取呢? 如类似今日头条这样的网 ...
- 如何用python抓取js生成的数据 - SegmentFault
如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...
- Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...
- sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
原文:sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 在多人开发中最头疼的是人少事多没有时间进行codereview,本来功能都没时间写,哪有时间来开会细细来分析代码.软件能跑就行, ...
随机推荐
- A - Set of Strings
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description You ar ...
- (水题)Codeforces - 4C - Registration system
https://codeforces.com/problemset/problem/4/C 用来哈希的一道题目,用map也可以强行过,但是性能慢了6倍,说明是在字符串比较的时候花费了接近6倍的时间. ...
- iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架
cocoapods使用 ReactiveObjC -- 对应的是RAC的OC版本,最新3.1.0版本. ReactiveCocoa--对应的是RAC的swift版本,最新7.1.0版本. 1.纯OC项 ...
- HTML5 中的meter 标签的样式设置
meter { -webkit-appearance: none; position: relative; display: block; margin: 8px auto; width: 100px ...
- C++ STL map使用
Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map构造函数:map<string , in ...
- 51nod 1102 【单调栈】
思路: 对于这个高度往左能延伸最远x,往右能延伸最远y,(x+1+y)*w; 利用单调栈就行了: #include <cstdio> #include <stack> #inc ...
- 正向渲染路径细节 Forward Rendering Path Details
http://www.ceeger.com/Components/RenderTech-ForwardRendering.html This page describes details of For ...
- Puppet2d及教程
http://www.jianshu.com/p/e56c7f5e58ab manual http://www.unitymanual.com/thread-35754-1-1.html http:/ ...
- hyperledger fabric 1.0.5 分布式部署 (六)
如何在相同的peer 节点上创建多个 channel 作者在hyperledger fabric 1.0.5 分布式部署 (五)已经向读者们介绍了一个简单的fabric 的部署流程,那么根据上一篇博客 ...
- java 程序从linux 上接收不可见字符
近期在写一个简单的小java程序,希望在运行java 程序时,从shell 中接收参数,并且参数的内容为不可见字符. 开始时还觉得可以使用"\"之类的转义符来写,后来发现java程 ...