使用Jsoup抓取网页内容,获取美元兑人民币外汇汇率

/**
 * 汇丰外汇汇率查询工具
 * @author june
 */
public class HSBCRateUtil{
	
	/** 美元兑人民币汇率 */
	private static final String HSBC_RATE_USD = "USD";
	
	/** 连接超时时间 */
	private static final int CONNECT_TIME_OUT = 5 * 1000;
	
	/** 汇丰汇率DOM 节点 */
	private static final String HSBC_RATE_DOM = "tr.hsbcTableRow03";
	
	/** 汇丰汇率更新时间DOM 节点 */
	private static final String HSBC_RATE_UPDATE_TIME_DOM = "td.ForTime01";
	
	/** 美元兑人民币最高汇率 */
	public static final String USD_CNY_MAX_RATE = "USD_CNY_MAX_RATE";
	
	/** 汇率更新时间 */
	public static final String RATE_UPDATE_TIME = "RATE_UPDATE_TIME";
	
	/** 汇率更新成功标识  */
	public static final String RATE_UPDATE_SUCCESS = "RATE_UPDATE_SUCCESS";
	
	/** 汇丰外汇汇率查询地址 */
	private static final String FX_RATE_HSBC_URL = "http://www.hsbc.com.cn/1/2/misc-cn/exchange-rates/";
	
	/**
	 * 私有化
	 */
	private HSBCRateUtil(){
		
	}
	
	/**
	 * 根据URL获取Dom树
	 * @param url
	 * @return
	 * @throws IOException 
	 */
	private static Document request(String url) throws IOException{
		Document document = Jsoup.connect(url) 
		.timeout(CONNECT_TIME_OUT)
		.post();
		return document;
	}
	
	/**
	 * 获取当时最高汇率
	 * @return
	 * @throws IOException 
	 */
	public static HashMap<String, Object> getUSDMaxRate(){
		//最高的汇率值
		double maxRate = 0;
		//是否更新成
		boolean success = true;
		//汇率更新时间
		String updateTime = null;
		try {
			//获取dom树
			Document document = request(FX_RATE_HSBC_URL);
			if(null != document){
				//汇率更新时间
				updateTime = getUpdateTime(document);
				//最高的汇率值
				maxRate = getMaxRate(document, HSBC_RATE_USD);
				if(maxRate <= 0){
					success = false;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			success = false;
		}
		//返回结果
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap.put(USD_CNY_MAX_RATE, maxRate);
		resultMap.put(RATE_UPDATE_TIME, updateTime);
		resultMap.put(RATE_UPDATE_SUCCESS, success);
		return resultMap;
	}

	/**
	 * 获取汇率的更新时间
	 * @param document
	 * @return
	 */
	private static String getUpdateTime(Document document){
		//汇率更新时间
		String updateTime = null;
		//获取汇丰汇率DOM 节点
		Elements elements = document.select(HSBC_RATE_UPDATE_TIME_DOM);
		if(null != elements && elements.size() > 0){
			updateTime = elements.first().text();
			if(!StringUtils.isEmpty(updateTime)){
				int yearIndex = updateTime.indexOf("年");
				updateTime = updateTime.substring(yearIndex - 4);
				int startHour = updateTime.indexOf("午");
				int endHour = updateTime.indexOf("点");
				String hour12 = updateTime.substring(startHour+1, endHour);
				String hour24 = hour12;
				if(updateTime.contains("下午")){
					hour24 = String.valueOf(24-Integer.parseInt(hour12));
					updateTime = updateTime.replace("下午", "");
				}else{
					updateTime = updateTime.replace("上午", "");
				}
				updateTime = updateTime
						.replace("年", "-")
						.replace("月", "-")
						.replace("日", "")
						.replace(hour12+"点", hour24+":")
						.replace("分", ":")
						.replace("秒", "");
			}
		}
		return updateTime;
	}
	
	
	/**
	 * 获取最高的汇率值
	 * @param document
	 * @param currency
	 * @return
	 */
	private static double getMaxRate(Document document, String currency){
		//最高的汇率值
		double maxRate = 0;
		//获取汇丰汇率DOM 节点
		Elements elements = document.select(HSBC_RATE_DOM);
		if(null == elements) return 0;
		for(Element element : elements){
			//过滤出美元的dom节点
			String text = element.text();
			if(!StringUtils.isEmpty(text) && text.contains(HSBC_RATE_USD)){
				List<Element> tds = element.children();
				if(null != tds){
					for(Element td : tds){
						String value = td.text();
						//获取美元现有的不同报价
						if(!StringUtils.isEmpty(value) && !value.contains(currency)){
							double rate = Double.parseDouble(value.trim());
							if(maxRate < rate){
								maxRate = rate;
							}
						}
					}
				}
				break;
			}
		}
		return maxRate; 
	}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Java编写基于HttpClient和Jsoup的爬虫,需要进行以下步骤: 1. 首先,导入HttpClient和Jsoup的依赖包。可以使用maven或gradle进行依赖管理。 2. 创建一个HttpClient实例,用于发送HTTP请求和接收响应。可以使用HttpClients.createDefault()方法创建一个默认配置的实例。 3. 创建一个HttpGet实例,设置请求URL和请求头信息。可以使用new HttpGet(url)方法创建一个HttpGet实例,然后使用setHeader()方法设置请求头信息。 4. 发送HTTP请求,并获取响应结果。可以使用HttpClient.execute()方法发送请求,并使用HttpResponse.getEntity()方法获取响应实体。 5. 解析HTML内容。可以使用Jsoup.parse()方法解析HTML内容,然后使用Jsoup提供的API进行内容提取和处理。 以下是一个使用HttpClient和Jsoup进行网页爬取的示例代码: ```java import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.IOException; public class WebCrawler { public static void main(String[] args) throws IOException { // 创建一个HttpClient实例 HttpClient httpClient = HttpClients.createDefault(); // 创建一个HttpGet实例,设置请求URL和请求头信息 HttpGet httpGet = new HttpGet("https://www.example.com"); httpGet.setHeader("User-Agent", "Mozilla/5.0"); // 发送HTTP请求,并获取响应结果 HttpResponse httpResponse = httpClient.execute(httpGet); String html = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); // 解析HTML内容 Document document = Jsoup.parse(html); String title = document.title(); System.out.println("Title: " + title); } } ``` 在这个示例中,我们使用HttpClient发送了一个GET请求到https://www.example.com,并获取了响应结果。然后使用Jsoup解析HTML内容,并获取了网页的标题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值