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"));
}
}
// 返回到页面显示
}
}