`
lxwt909
  • 浏览: 572780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

益达教你如何抓取Ajax动态页面

阅读更多

       何为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地址请猛戳我,用力,吃点劲儿!!!

 

 

 

 

  

 

  • 大小: 201.9 KB
  • 大小: 248.7 KB
  • 大小: 311.8 KB
  • 大小: 274 KB
  • 大小: 446.9 KB
  • 大小: 294.8 KB
11
6
分享到:
评论

相关推荐

    实益达:首次公开发行股票招股说明书.PDF

    实益达:首次公开发行股票招股说明书.PDF

    益达新产品男士益达推出市场广告策划书学习教案.pptx

    【益达新产品男士益达市场广告策划书学习教案】是一个关于市场营销和产品定位的专业资料,主要探讨了益达品牌如何针对男性市场推出专门的口腔护理产品。这份文档可能包含了以下几个关键知识点: 1. **市场分析**:...

    从整合营销看益达广告.docx

    益达口香糖的广告策略深入探讨了整合营销传播(IMC)的概念,旨在通过一致的品牌信息和情感诉求,提高品牌知名度和市场份额。益达广告的核心在于创造与消费者的情感连接,将其产品与甜蜜、关爱和健康的形象紧密相连...

    益达.base.apk

    益达.base.apk

    益达防封V2.7

    【益达防封V2.7】是一款专为网络游戏玩家设计的防封软件,其主要功能在于帮助用户在游戏过程中避免被服务器封禁账号。在网络游戏环境中,由于各种原因,如使用外挂、违反游戏规则等,玩家的账号可能会面临被封禁的...

    益达口香糖广告策划书.doc

    【益达口香糖广告策划书】是一份详细的市场分析与广告策略规划文档,旨在为益达口香糖制定有效的营销推广方案。该策划书涵盖了市场分析、广告策略、促销计划以及广告效果预测等多个关键环节。 在【市场分析】部分,...

    跟益达学Solr5之索引网络上远程文件

    《Solr5索引网络上远程文件详解》 在信息技术领域,搜索引擎的高效与便捷是不可或缺的,Apache Solr作为一款强大的开源搜索平台,被广泛应用于各种数据检索场景。本篇我们将深入探讨如何利用Solr5来索引网络上的...

    跟益达学Solr5之从MySQL数据库导入数据并索引

    《跟益达学Solr5之从MySQL数据库导入数据并索引》这篇文章主要探讨了如何使用Apache Solr 5从MySQL数据库中导入数据并建立索引,以便进行高效的全文搜索。Solr是一款强大的开源搜索服务器,它提供了丰富的查询语言、...

    益达口香糖问卷调查统计表.doc

    【益达口香糖问卷调查统计表】是一个关于消费者对口香糖购买习惯、品牌认知、口味偏好以及营销策略反应的详细分析文档。这个文档旨在深入理解消费者在选择口香糖时考虑的因素,以便益达作为制造商能更好地适应市场...

    乐益达 儿童益智网html样式

    【乐益达 儿童益智网html样式】是一个关于使用HTML进行网页设计和布局的主题,主要关注如何创建一个适合儿童使用的益智网站。HTML(HyperText Markup Language)是网页开发的基础,它通过标记语言定义了网页的结构和...

    实益达:2021年半年度报告.zip

    【标题】:“实益达:2021年半年度报告” 【描述】:“实益达:2021年半年度报告”这份文件是一个压缩包,其中包含的是实益达公司2021年上半年的业绩总结和分析。半年度报告通常会涵盖公司的经营状况、财务数据、...

    20210331-新时代证券-实益达-002137-“智能硬件+智慧营销”双轮驱动,公司迈入发展快车道.pdf

    实益达(002137.SZ)正是这一时代背景下的典型企业,它将智能硬件和智慧营销作为双轮驱动力,以此迈入了发展的快车道。 实益达在智能硬件领域深耕多年,业务涵盖智能照明、智能电源部件、智能锁具、金融终端产品、...

    跟益达学Solr5之使用Ansj分词器

    《跟益达学Solr5之使用Ansj分词器》 在中文信息检索和文本分析领域,分词是至关重要的第一步。Solr,作为一款强大的开源搜索平台,提供了多种分词器供用户选择,其中之一就是Ansj分词器。这篇文章将深入探讨如何在...

    跟益达学Solr5之索引文件夹下所有文件

    Solr5是Apache Lucene项目下的一个开源搜索服务器,它提供了全文检索、命中高亮、拼写检查、分类、自定义排序等功能。本教程将基于"跟益达学...通过学习这些内容,你可以掌握如何利用Solr5构建一个强大的文件搜索系统。

    行业-实益达-002137-“智能硬件+智慧营销”双轮驱动,公司迈入发展快车道.rar

    标题和描述中提到的“实益达”是一家在IT行业中以智能硬件和智慧营销为主要业务的企业,其战略是通过这两方面的结合推动公司的快速发展。这里我们将深入探讨智能硬件和智慧营销这两个核心概念,以及它们如何相互协作...

    实益达:2021年半年度报告.PDF

    【深圳市实益达科技股份有限公司2021年半年度报告】是该公司对于2021年上半年经营状况的全面总结和分析。报告强调了董事会、监事会以及管理层对报告内容的真实性、准确性、完整性的保证,明确了各自的责任,并警示了...

    跟益达学Solr5之增量索引MySQL数据库表数据

    总结,学习“跟益达学Solr5之增量索引MySQL数据库表数据”,你将掌握如何设置Solr与MySQL的集成,使用DIH进行增量索引,以及优化索引性能。这不仅有助于提升搜索效率,也是企业级应用中数据检索不可或缺的技能。

    跟益达学Solr5之批量索引JSON数据

    在创建核心时,你可以预定义一个Schema,或者在索引数据之前动态地添加字段。 4. **准备JSON数据**:打开`json.txt`文件,检查数据格式是否正确。每个JSON对象应表示一条记录,键是字段名,值是字段值。例如: ```...

    转自:跟益达学Solr5之玩转post.jar

    《跟益达学Solr5之玩转post.jar》这篇博文主要探讨了如何利用Solr的`post.jar`工具进行数据导入,这是Solr提供的一个非常实用的功能,用于快速将各种格式的数据导入到Solr索引中。在这个过程中,我们不仅会了解`post...

Global site tag (gtag.js) - Google Analytics