package com.zp.util;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.HashMap; import java.util.List;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;
/** * 大数据批量数据检索工具类 * @author 盲鹰 * @version 1.0 */ public class DataDownUtil {
/** * 根据网址和网页的编码集,获取网页源代码 * @author 盲鹰 * @param url 网址 * @param encoding 网页编码集 * @return */ public static String getHTMLResourceByUrl(String url, String encoding) { StringBuffer buffer = new StringBuffer(); URL urlObj = null; URLConnection uc = null; InputStreamReader isr = null; BufferedReader reader = null; try { // 建立网络连接 urlObj = new URL(url); // 打开网络连接 uc = urlObj.openConnection(); // 建立文件写入流 isr = new InputStreamReader(uc.getInputStream(), encoding); // 建立文件缓冲写入流 reader = new BufferedReader(isr); String temp = null; while((temp = reader.readLine()) != null) { //边读边写 buffer.append(temp "n"); } return buffer.toString(); } catch (MalformedURLException e) { e.printStackTrace(); System.out.println("世界上最遥远的距离就是没有网,请检查设置。"); } catch (IOException e) { e.printStackTrace(); System.out.println("您打开的网络连接失败!请您稍后。"); } finally { if (isr != null) { try { isr.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } /** * 解析网页源代码,获取对应的自定义采集内容 * @author 盲鹰 * @param url 网址 * @param encoding 网页编码集 * @return List集合 */ public static List<HashMap<String, String>> getHotelInfo(String url, String encoding) { // 根据网址和网页的编码集,获取网页源代码 String html = getHTMLResourceByUrl(url, encoding); // 解析网页源代码,获取对应的自定义采集内容 Document document = Jsoup.parse(html); // 获取最外层的 div id="hotel_list" Element element = document.getElementById("listZone"); // 获取酒店结果列表searchresut_list Elements elements = document.getElementsByClass("Q-tpListInner"); // 解析网页源代码层次结构 List<HashMap<String, String>> maps = new ArrayList<HashMap<String, String>>(); for (Element el : elements) { HashMap<String, String> map = new HashMap<String, String>(); // 获取酒店图片 String imgSrc = el.getElementsByTag("img").attr("src"); // 获取酒店title String title = el.getElementsByTag("img").attr("alt"); // 获取酒店的描述 String content = el.getElementsByTag("p").text(); map.put("imgSrc", imgSrc); map.put("title", title); map.put("content", content); //存储到List集合中用于前台遍历 maps.add(map); } return maps; } public static void main(String[] args) {
String url = "http://tech.qq.com/"; String encoding = "gbk"; List<HashMap<String, String>> maps = getHotelInfo(url, encoding); if (maps != null && maps.size() > 0) { for (HashMap<String, String> map : maps) { System.out.println("title:" map.get("title")); System.out.println("图片:" map.get("imgSrc")); System.out.println("描述:" map.get("content")); } } // 返回到页面显示
} }