Jsoup+HtmlUnit获取懒加载数据

需要的包:

		
			org.projectlombok
			lombok
			provided
			1.16.20
				
                
			org.jsoup
			jsoup
			1.8.3
		
		
			net.sourceforge.htmlunit
			htmlunit
			2.25
		

返回的类:

import lombok.Data;

/* 
* @author zzf 
* @date 2019年1月15日 下午5:07:17 
*/
@Data
public class TyphoonReportVo {
	
	/**
	 * 发布时间
	 */
	String releaseTime;
	
	/**
	 * 经度
	 */
	String longitude;
	
	/**
	 * 纬度
	 */
	String latitude;
	
	/**
	 * 中心气压
	 */
	String centralPressure;
	
	/**
	 * 最大风速
	 */
	String maxWind;
	
	/**
	 * 台风等级
	 */
	String typhoonLevel;
	
	/**
	 * 台风名
	 */
	String typhoonName;

}

这里我要爬取的是台风信息:

http://typhoon.weather.com.cn/

Jsoup+HtmlUnit获取懒加载数据_第1张图片

Jsoup+HtmlUnit获取懒加载数据_第2张图片

 

代码如下:

	public List getTyphoonReport() {
		List list=new ArrayList<>();
        String typhoonWeatherUrl="http://typhoon.weather.com.cn/";
		try {
			WebClient wc = new WebClient(BrowserVersion.CHROME);
			// 启用JS解释器,默认为true
			wc.getOptions().setJavaScriptEnabled(true);
			// 禁用css支持
			wc.getOptions().setCssEnabled(false);
			// js运行错误时,是否抛出异常
			wc.getOptions().setThrowExceptionOnScriptError(false);
			// 状态码错误时,是否抛出异常
			wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
			// 设置连接超时时间 ,这里是5S。如果为0,则无限期等待
			wc.getOptions().setTimeout(5000);
			// 是否允许使用ActiveX
			wc.getOptions().setActiveXNative(false);
			// 等待js时间
			wc.waitForBackgroundJavaScript(1 * 1000);
			// 设置Ajax异步处理控制器即启用Ajax支持
			wc.setAjaxController(new NicelyResynchronizingAjaxController());
			// 不跟踪抓取
			wc.getOptions().setDoNotTrackEnabled(false);
			HtmlPage page = wc.getPage(typhoonWeatherUrl);
			// 以xml的形式获取响应文本
			String pageXml = page.asXml();
			Document document = Jsoup.parse(pageXml);
			//获取对应a标签的url
			Element a = document.select("div.borBox > h2.titleA > span > a").get(0);
			String typhoonName = a.text();
			page = wc.getPage(a.attr("href"));
			pageXml = page.asXml();
			Document listDocument = Jsoup.parse(pageXml);
			//获取台风历史信息
			Elements trs = listDocument.select("table > tbody > tr:gt(5)");
			for (Element tr : trs) {
				//保存数据
				TyphoonReportVo typhoonReportVo=new TyphoonReportVo();
				typhoonReportVo.setReleaseTime(tr.select("td:eq(0)").get(0).text());
				typhoonReportVo.setLongitude(tr.select("td:eq(1)").get(0).text());
				typhoonReportVo.setLatitude(tr.select("td:eq(2)").get(0).text());
				typhoonReportVo.setCentralPressure(tr.select("td:eq(3)").get(0).text());
				typhoonReportVo.setMaxWind(tr.select("td:eq(4)").get(0).text());
				typhoonReportVo.setTyphoonLevel(tr.select("td:eq(5)").get(0).text());
				typhoonReportVo.setTyphoonName(typhoonName);
				System.out.println(tr);
				list.add(typhoonReportVo);
			}
		} catch (Exception e) {
			return null;
		}
		return list;
	}

运行后:

Jsoup+HtmlUnit获取懒加载数据_第3张图片

ok~这样就能获取懒加载后的数据了!

你可能感兴趣的:(爬虫,Java)