如何实现动态页面爬虫的java程序编写 java程序调用命令行执行phantomjs脚本返回源码为空

guotong1984 guotong1984 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我首先下载了一个phantomjs,接下来完成了两个代码,一个是用phantomjs去获取页面(采用js编写行为),一个是采用java去调用phantomjs来达到获取内容的目的。
下面直接贴上我的代码,请各位大神帮帮忙!哪里出了问题。
//snap.js,获取页面代码的js代码。
var page = new WebPage(),
address, output, size;
var fs = require('fs');
page.settings.resourceTimeout = 5000; // 5 seconds
page.onResourceTimeout = function(e) {
console.log(e.errorCode); // it'll probably be 408
console.log(e.errorString); // it'll probably be 'Network timeout on resource'
console.log(e.url); // the url whose request timed out
phantom.exit(1);
};
if (phantom.args.length < 2 || phantom.args.length > 3) {
console.log('Usage: rasterize.js URL filename');
phantom.exit();
} else {
address = phantom.args[0];
output = phantom.args[1];
page.viewportSize = { width: 600, height: 600 };
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
} else {
//window.setTimeout(function () {
// page.render(output);
// phantom.exit();
//}, 200);
console.log("woca");
console.log(page.content);
phantom.exit();
/*try {
//sleep(5000);
fs.write(output, page.content, 'w');
phantom.exit();
} catch(e) {
console.log(e);
}
*/
}
});
} //估计好多人不怎么看懂上面代码,就是一个phantomjs渲染获取页面源代码的脚本

获取完之后,下面是一段java代码,通过调用phantomjs得到页面源代码,我做的实验用的网址url为腾讯滚动http://roll.news.qq.com
//爬动态网页(命令行调用phantomjs)
public static String crawDynamicPage(String sUrl,String sChset){
String sRet = "";
String sCharset = sChset;
try{
Runtime run = Runtime.getRuntime();

String str1 = "F:/PhantomJS/phantomjs-1.9.7-windows/phantomjs.exe snap.js ";
String cmd = str1 + sUrl; //后面要有输出

Process process = run.exec(cmd);

InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = bufferedReader.readLine()) != null) {
//System.out.println(line);
sb.append(line);
sb.append("/r/n");
}

sRet = sb.toString();

}
catch(IOException e) {
//
e.getMessage();
}
return sRet;
}
其实原理很简单,就是通过进程间通信用java调用phantomjs这个组件去请求渲染页面,不知道什么原因,最近调试sRet返回的字符串都是空,说明没有获取到页面内容,所以以为是timeout超时问题,就在js脚本上添加了超时timeout语句,也不知道添加的对不对,反正现在一直出不来内容,但是通过dos的命令行窗口可以调用phantomjs返回页面源码,请大神们支招!不胜感激!
...全文

相关推荐

基于Java实现的网络爬虫(蜘蛛)源码.zip

项目资源】:基于Java实现的网络爬虫(蜘蛛)源码 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

MarcoPage

Python3爬虫技术文档(三)——动态页面数据获取

上文说到,我们可以通过分析Ajax访问服务器的方式来获取Ajax数据。Ajax也算动态渲染页面的一种。所以,动态页面也是可以爬取滴。 文章目录Selenium安装SeleniumSelenium基本使用方法声明浏览器对象访问页面查找节点节点交互获取节点信息 Selenium Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用

weixin_38692836

网络爬虫 之 PhantomJS技术实战

本课程使用java作为编程语言,主要内容包括爬虫的基本原理,使用Phantomjs技术抓取拉钩企业招聘信息进行系统分析、Phantomjs的详细使用方法,如何使用Phantomjs分析html代码,基于队列的爬虫、数据存储、数据拆分、爬虫限速、网页跟踪,脚本注入等技术。任务作业:请抓取拉钩企业招聘数据进行企业岗位数据分析实战《各大城市招聘状况分析》。(注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

程昱森

Python爬虫系列之PhantomJS+Selenium+AutoIt.pptx

该PPT介绍了Python爬虫在爬取动态网页方面会用到的软件PhantomJS, Selenium, 以及AutoIt. 欢迎对爬虫有兴趣的童鞋进行下载哈,本人亲自制作的PPT~~

山阴少年

[详细完整版]爬虫基本知识.pdf

爬⾍基本知识 ⼀、爬⾍简介 根据百度百科定义:⽹络爬⾍(⼜被称为⽹页蜘蛛,⽹络机器⼈,在FOAF社区中间,更经常的称为⽹页追逐者),是 ⼀种按照⼀定的规则,⾃动地抓取万维⽹信息的程序或者脚本。另外⼀些不常使⽤的名字还有蚂蚁、⾃动索引、模拟程 序或者蠕⾍。 随着⼤数据的不断发展,爬⾍这个技术慢慢⾛⼊⼈们的视野,可以说爬⾍是⼤数据应运⽽⽣的产物,⾄少 我解除了⼤数据才了解到爬⾍这⼀技术 ⼆、⼏种适合爬⾍的语⾔ 1.phantomjs 这个语⾔在17年4⽉其开核⼼发者之⼀Vitaly辞退维护⼯作,表⽰不再维护。其原话内容如下: 我看不到 PhantomJS 的未来,作为⼀个单独的开发者去开发 PhantomJS 2 和 2.5 ,简直就像是⼀个⾎腥的地狱。 即便是最近发布的 2.5 Beta 版本拥有全新、亮眼的 QtWebKit ,但我依然⽆法做到真正的⽀持 3 个平台。我们没有得 到其他⼒量的⽀持! 并且Vitaly 发⽂表⽰,Chrome 59 将⽀持 headless 模式,⽤户最终会转向去使⽤它。Chrome ⽐ PhantomJS 更快,更 稳定,也不会像 PhantomJS 这

小虾仁芜湖
评论 6
收藏 已收藏
分享
返回顶部
guotong1984
Java 51,407 成员 86,128 内容