java 爬取页面数据信息

使用 htmlunit 来获取页面数据

在 pom.xml 中添加依赖

<dependencies>
	<dependency>
	    <groupId>net.sourceforge.htmlunit</groupId>
	    <artifactId>htmlunit</artifactId>
	    <version>2.44.0</version>
	</dependency>
	<dependency>
	    <groupId>net.sourceforge.htmlunit</groupId>
	    <artifactId>htmlunit-cssparser</artifactId>
	    <version>1.6.0</version>
	</dependency>
	<dependency>
	    <groupId>net.sourceforge.htmlunit</groupId>
	    <artifactId>htmlunit-core-js</artifactId>
	    <version>2.44.0</version>
	</dependency>
</dependencies>

java 代码

//爬取页面数据
public void crawlData() {
   WebClient webClient = new WebClient(BrowserVersion.CHROME);// 新建一个模拟谷歌Chrome浏览器的浏览器客户端对象
   webClient.getOptions().setThrowExceptionOnScriptError(false);// 当JS执行出错的时候是否抛出异常, 这里选择不需要
   webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);// 当HTTP的状态非200时是否抛出异常, 这里选择不需要
   webClient.getOptions().setActiveXNative(false);
   webClient.getOptions().setTimeout(30000);
   webClient.getOptions().setCssEnabled(false);// 是否启用CSS, 因为不需要展现页面, 所以不需要启用
   webClient.getOptions().setJavaScriptEnabled(false); // 很重要,启用JS
   webClient.getOptions().setDownloadImages(false);
   webClient.setAjaxController(new NicelyResynchronizingAjaxController());// 很重要,设置支持AJAX
   webClient.getOptions().setMaxInMemory(-1);
   // 3 启动客户端重定向
   webClient.getOptions().setRedirectEnabled(true);
   // 8设置cookie
   webClient.getCookieManager().setCookiesEnabled(true);


   try {
       HtmlPage page = (HtmlPage) webClient.getPage("url地址");

       //-------常用获取元素方法---------
       HtmlForm form = page.getForms().get(0); //获取网页中的第一个form表单
       HtmlInput input = form.getInputByName("inputName");//通过 input 的 name 属性获取元素
       input.setValueAttribute("value");   //给 input 设置值
       String s = input.asText();  //获取input 的值
       System.out.println(s);
       HtmlInput inputValue = form.getInputByValue("inputValue");  //通过input值获取元素

       DomElement domId = page.getElementById("domId");//通过元素的id属性获取元素
       DomNodeList<DomElement> divList = page.getElementsByTagName("div");     //通过元素名获取元素集合

       DomNode domNode = page.querySelector(".className"); //通过class获取元素,默认获取第一个
       DomNodeList<DomNode> domNodeList = page.querySelectorAll(".className");    //通过class获取元素集合
       //-------------------------------

       //----当遇到需要点击查询获取数据的页面----
       HtmlPage page1 = (HtmlPage) page.getElementById("buttonId").click();   //获取可以点击的元素(可通过任意方法获取,这里使用id获取),调用方法获得新的页面

       synchronized (page1) {      //此句代码解决点击后获取新的页面,此页面数据是在js中渲染
           page1.wait(5000);
       }

       //当遇到需要获取 iframe 下的数据信息
       String src = page1.getElementsByTagName("iframe").get(0).getAttribute("src");   //获取iframe的src值
       HtmlPage page2 = (HtmlPage) webClient.getPage(src); //重新获取页面,如若src不是一个完成的地址,可以拿原先的域名+src尝试获取
	   //---------------------------------

   } catch (Exception e) {
       e.printStackTrace();
   }
}

细点描述

此方法爬取页面数据跟javascript很类似,首先通过webClient.getPage(“”)方法获取到页面,再通过id名称、class名称、元素名、元素值等方法获取元素,再通过asText()方法获取字符串类型值

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值