htmlUnit 静态化 页面(目前,我能用的唯一方法)

hanmeixiaoxue 2014-07-07 12:04:35
ajax异步加载的页面,用htmlUnit来静态化页面,思想是:做2个模板,一个采用页面加载的时候 同步 加载 ajax数据,把加载完的页面的内容复制到第2个模板,再将第2个模板保存,这样用户直接访问静态页面。(备注:第二个模板其实只是加载页面的时候不再加载数据,因为要另存为静态页面)
大致思路是这样的,代码如下(这里是静态产品页面的htmlUnit代码):
public static void productzAllToHtml() {
try {
// 创建一个可执行js,css,ajax的多功能WebClient
WebClient multiWebClient = new WebClient(
BrowserVersion.INTERNET_EXPLORER_8);
multiWebClient.setJavaScriptEnabled(true);// 执行JavaScript
multiWebClient.setCssEnabled(true);// 执行css
multiWebClient
.setAjaxController(new NicelyResynchronizingAjaxController());// 设置ajax代理
// 上面加载一个动态的页面(模板1)

// 创建一个普通的WebClient
WebClient commmonWebClient = new WebClient(
BrowserVersion.INTERNET_EXPLORER_8);
commmonWebClient.setJavaScriptEnabled(true);
commmonWebClient.setCssEnabled(false);
//上面是模板2

// 下面是分别加载页面,并执行js
URL dynamicUrl = new URL("http://localhost/fangnw/productzAll.html");
HtmlPage dynamicPage = (HtmlPage) multiWebClient
.getPage(dynamicUrl);//加载动态页面,ajax执行,
// 根据项目需要,使用普通Client加载首页模板(避免执行模板里面的js,这些js都是真正要浏览器查看的时候才会执行)
URL constantUrl = new URL(
"http://localhost/fangnw/productzAll_m.html");
HtmlPage htmlpage = (HtmlPage) commmonWebClient
.getPage(constantUrl);
//这里是动态页面内容copy到静态模板里面
htmlpage.getElementById("contain_in").replace(
dynamicPage.getElementById("contain_in"));

//这里是保存,采用asXML()方法,就是这里,页面保存后变成xml了,我希望是html,没有asHTML()方法啊??
stringToFile(htmlpage.asXml(), "E:\\productzAll_d.html");
// 关闭浏览器
multiWebClient.closeAllWindows();
commmonWebClient.closeAllWindows();
} catch (Exception e) {
e.printStackTrace();
}
}

/保存文件的工具函数
public static void stringToFile(String content, String path) {
try {
FileWriterWithEncoding fileWriter = new FileWriterWithEncoding(
path, "utf-8");
fileWriter.write(content);
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}


请问,如何保存为 html页面呢? 我希望htmlUnit中有这样的方法,只是我没有找到,请大家帮助啊!!

(我能想到的其他解决方法:通过java删除xml的<? version="1.0" ...>头部.在添加 html的 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">)

下面是我静态后的页面头部文件:
<?xml version="1.0" encoding="utf-8"?> //好端端的html 被搞成xml的,这里怎么修改啊?
<html>
<head>
<base target="_blank"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>
【北京新房_潮白河孔雀城 】-九房网
</title>
<link href="./css/productInfo.css" rel="stylesheet" type="text/css"/>

我希望保存后的是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html> //这个才是html啊,css才能有横好的效果
<head>
<base target="_blank"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>
【北京新房_潮白河孔雀城 】-九房网
</title>
<link href="./css/productInfo.css" rel="stylesheet" type="text/css"/>

具体请大家 访问:http://www.jiu30.com 网站,在网站地图下面可以静态页面,网站其他地方时动态页面!

希望得到大家的帮助 谢谢! 我的qq12327649 ,欢迎一起学习 谢谢
...全文
246 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
上海程序员3 2014-07-08
  • 打赏
  • 举报
回复
这个方法我以前用的,的确效果很不错,但最后我又改成直接使用动态方式了,我发现减少维护量,比什么都重要,至于性能,承受不了的时候,加服务器比改代码更合适!
hanmeixiaoxue 2014-07-08
  • 打赏
  • 举报
回复
有没有可帮助的啊?
Nutch Htmlunit Plugin 重要说明: 当前项目基于Nutch 1.X系列已停止更新维护,转向Nutch 2.x系列版本的新项目:http://www.oschina.net/p/nutch-ajax 项目简介 基于Apache Nutch 1.8和Htmlunit组件,实现对于AJAX加载类型页面的完整页面内容抓取解析。 According to the implementation of Apache Nutch 1.8, we can't get dynamic HTML information from fetch pages including AJAX requests as it will ignore all AJAX requests. This plugin will use Htmlunit to fetch whole page content with necessary dynamic AJAX requests. It developed and tested with Apache Nutch 1.8, you can try it on other Nutch version or refactor the source codes as your design. 主要特性 常规的HTML页面抓取: 对于常规的例如新闻类没有AJAX特性的页面可以直接用Nutch自带的protocol-http插件抓取。 常规的AJAX页面抓取: 对于绝大部分诸如jQuery ajax加载的页面,可以直接用protocol-htmlunit插件抓取。 特殊的AJAX请求页面抓取: 诸如淘宝/天猫的页面采用了独特的Kissy Javascript组件, 导致htmlunit无法直接感知到需要等待Kissy发起的请求完成,通过等待页面加载解析内容判断处理实现此类页面数据抓取。 基于页面滚动的AJAX请求页面抓取: 诸如淘宝/天猫的商品详情页面会基于页面滚动发起商品描述信息的加载, 通过protocol-htmlunit扩展处理可以实现此类页面数据抓取。 运行体验 由于Nutch运行是基于Unix/Linux环境的,请自行准备Unix/Linux系统或Cygwin运行环境。 git clone整个工程代码后,进行本地git下载目录: cd nutch-htmlunit/runtime/local bin/crawl urls crawl false 1 //urls参数为爬虫入库url文件目录; crawl为爬虫输出目录; false本应为solr索引url参数,此处设置为false不做solr索引处理; 1为爬虫执行回数 运行结束后可以看到天猫商品页面的价格/描述/滚动加载的图片等所有信息都已经完整获取到。 运行日志输入示例参考:http://git.oschina.net/xautlx/nutch-htmlunit/wikis/Log 扩展插件说明 protocol-htmlunit: 基于Htmlunit实现的AJAX页面Fetcher插件 parse-s2jh: 基于XPath解析页面元素内容; 基于数据库模式输出解析到结构数据; 对于个别复杂类型AJAX页面定制判断页面加载完成的回调判断逻辑 index-s2jh: 追加设置需要额外传递给solr索引的属性数据; 设定不需要索引的页面规则; 欢迎关注作者其他项目: S2JH - 基于SSH的企业Web应用开发框架 12306 Hunter - (功能已失效不可用,不过还可以当作Swing开发样列参考只用)Java Swing C/S版本12306订票助手,用处你懂的 标签:nutch

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧