何为Ajax动态网页,我想不用我多说了吧,如果你连Ajax是啥玩意儿都不知道,那你还是先去Google学习Ajax吧。为了形象起见,这里我以抓取这个网页为例进行讲解说明。网页链接如下:
http://www.sse.com.cn/assortment/stock/list/name/
很明显,我们要抓取的数据是
打开谷歌浏览器的开发者工具,我们会发现,他其实是采用Ajax方式动态加载的,且采用的jsonp跨域方式返回的,分析如图:
由此可以推断,分页部分信息是通过javaScript动态往DOM中插入的,如果你仅仅是通过类似HttpClient之类的工具来模拟Http请求来获取网页信息的话,你得到的网页内容将不是完整的,而HtmlUnit可以做到。
OK,回到主题,可能你还是第一次听说有个HtmlUnit这个玩意儿,有可能你是大咖早已听说,但我还是觉得还是官方的解释说明最权威,我就不瞎BB了,看图:
总之,一句话,HtmlUnit其实就是一个测试工具,方便测试人员进行功能测试,它能模拟诸如谷歌浏览器,火狐浏览器,IE浏览器等常见主流浏览器的行为。废话不多说,我直接上demo:
/** * 上海证券交易所数据抓取测试 * @since 1.0 * @author Lanxiaowei@citic-finance.com * @date 2015-8-27下午6:16:14 * */ public class ShangHaiStockTest { public static void main(String[] args) throws Exception { downloadListPage(); } public static void downloadListPage() throws Exception { WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38); webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setActiveXNative(false); webClient.getOptions().setAppletEnabled(false); webClient.getOptions().setRedirectEnabled(false); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setUseInsecureSSL(false); webClient.getOptions().setTimeout(10000000); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); int totalPage = 22; boolean first = true; HtmlPage page = null; do { if(first) { page = (HtmlPage)webClient.getPage("http://www.sse.com.cn/assortment/stock/list/name/"); FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false); first = false; } else { HtmlAnchor anchor = null; if(totalPage == 22 -1) { anchor = (HtmlAnchor) page.getHtmlElementById("xsgf_next"); } else { anchor = (HtmlAnchor) page.getHtmlElementById("dateList_container_next"); } page = (HtmlPage) anchor.click(); FileUtils.writeFile(page.asXml(), "C:/shh/list/" + totalPage + ".html", "UTF-8", false); } totalPage--; } while(totalPage > 0); //关闭模拟窗口 webClient.closeAllWindows(); } }
关键点:
1.webClient.getOptions().setJavaScriptEnabled(true);
启用JavaScript
2.webClient.setAjaxController(new NicelyResynchronizingAjaxController());
设置Ajax异步处理控制器即启用Ajax支持
3.webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
这两句很关键,前者表示当出现Http error时,程序不抛异常继续执行,后者表示当JavaScript执行出现异常时直接无视,否则Java代码会直接抛异常,程序中断。
demo代码里演示了,如何通过代码去模拟点击“下一页”超链接去分页获取每一页的网页内容,然后写入磁盘指定目录。程序很简单,希望能抛砖引玉,程序依赖的jar包如图:
就说这么多,如果有什么其他问题,请联系我,联系方式如下:
益达的GitHub地址:请猛戳我,用力,吃点劲儿!!!
相关推荐
实益达:首次公开发行股票招股说明书.PDF
【益达新产品男士益达市场广告策划书学习教案】是一个关于市场营销和产品定位的专业资料,主要探讨了益达品牌如何针对男性市场推出专门的口腔护理产品。这份文档可能包含了以下几个关键知识点: 1. **市场分析**:...
益达口香糖的广告策略深入探讨了整合营销传播(IMC)的概念,旨在通过一致的品牌信息和情感诉求,提高品牌知名度和市场份额。益达广告的核心在于创造与消费者的情感连接,将其产品与甜蜜、关爱和健康的形象紧密相连...
益达.base.apk
【益达防封V2.7】是一款专为网络游戏玩家设计的防封软件,其主要功能在于帮助用户在游戏过程中避免被服务器封禁账号。在网络游戏环境中,由于各种原因,如使用外挂、违反游戏规则等,玩家的账号可能会面临被封禁的...
【益达口香糖广告策划书】是一份详细的市场分析与广告策略规划文档,旨在为益达口香糖制定有效的营销推广方案。该策划书涵盖了市场分析、广告策略、促销计划以及广告效果预测等多个关键环节。 在【市场分析】部分,...
《Solr5索引网络上远程文件详解》 在信息技术领域,搜索引擎的高效与便捷是不可或缺的,Apache Solr作为一款强大的开源搜索平台,被广泛应用于各种数据检索场景。本篇我们将深入探讨如何利用Solr5来索引网络上的...
《跟益达学Solr5之从MySQL数据库导入数据并索引》这篇文章主要探讨了如何使用Apache Solr 5从MySQL数据库中导入数据并建立索引,以便进行高效的全文搜索。Solr是一款强大的开源搜索服务器,它提供了丰富的查询语言、...
【益达口香糖问卷调查统计表】是一个关于消费者对口香糖购买习惯、品牌认知、口味偏好以及营销策略反应的详细分析文档。这个文档旨在深入理解消费者在选择口香糖时考虑的因素,以便益达作为制造商能更好地适应市场...
【乐益达 儿童益智网html样式】是一个关于使用HTML进行网页设计和布局的主题,主要关注如何创建一个适合儿童使用的益智网站。HTML(HyperText Markup Language)是网页开发的基础,它通过标记语言定义了网页的结构和...
【标题】:“实益达:2021年半年度报告” 【描述】:“实益达:2021年半年度报告”这份文件是一个压缩包,其中包含的是实益达公司2021年上半年的业绩总结和分析。半年度报告通常会涵盖公司的经营状况、财务数据、...
实益达(002137.SZ)正是这一时代背景下的典型企业,它将智能硬件和智慧营销作为双轮驱动力,以此迈入了发展的快车道。 实益达在智能硬件领域深耕多年,业务涵盖智能照明、智能电源部件、智能锁具、金融终端产品、...
《跟益达学Solr5之使用Ansj分词器》 在中文信息检索和文本分析领域,分词是至关重要的第一步。Solr,作为一款强大的开源搜索平台,提供了多种分词器供用户选择,其中之一就是Ansj分词器。这篇文章将深入探讨如何在...
Solr5是Apache Lucene项目下的一个开源搜索服务器,它提供了全文检索、命中高亮、拼写检查、分类、自定义排序等功能。本教程将基于"跟益达学...通过学习这些内容,你可以掌握如何利用Solr5构建一个强大的文件搜索系统。
标题和描述中提到的“实益达”是一家在IT行业中以智能硬件和智慧营销为主要业务的企业,其战略是通过这两方面的结合推动公司的快速发展。这里我们将深入探讨智能硬件和智慧营销这两个核心概念,以及它们如何相互协作...
【深圳市实益达科技股份有限公司2021年半年度报告】是该公司对于2021年上半年经营状况的全面总结和分析。报告强调了董事会、监事会以及管理层对报告内容的真实性、准确性、完整性的保证,明确了各自的责任,并警示了...
总结,学习“跟益达学Solr5之增量索引MySQL数据库表数据”,你将掌握如何设置Solr与MySQL的集成,使用DIH进行增量索引,以及优化索引性能。这不仅有助于提升搜索效率,也是企业级应用中数据检索不可或缺的技能。
在创建核心时,你可以预定义一个Schema,或者在索引数据之前动态地添加字段。 4. **准备JSON数据**:打开`json.txt`文件,检查数据格式是否正确。每个JSON对象应表示一条记录,键是字段名,值是字段值。例如: ```...
《跟益达学Solr5之玩转post.jar》这篇博文主要探讨了如何利用Solr的`post.jar`工具进行数据导入,这是Solr提供的一个非常实用的功能,用于快速将各种格式的数据导入到Solr索引中。在这个过程中,我们不仅会了解`post...