jsoup简单的爬取网页数据
- /**
- * Project Name:JavaTest
- * File Name:BankOfChinaExchangeRate.java
- * Package Name:com.lee.javatest
- * Date:2016年7月22日下午1:34:09
- * Copyright (c) 2016年7月22日, Pwenlee All Rights Reserved.
- *
- */
- package com.lee.javatest;
- import java.io.Serializable;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import org.apache.http.HttpEntity;
- import org.apache.http.HttpResponse;
- import org.apache.http.HttpStatus;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.params.CoreConnectionPNames;
- import org.apache.http.util.EntityUtils;
- import org.jsoup.Jsoup;
- import org.jsoup.nodes.Document;
- import org.jsoup.nodes.Element;
- import org.jsoup.select.Elements;
- /**
- * ClassName:BankOfChinaExchangeRate <br/>
- * Function: 中行外汇牌价. <br/>
- * Date: 2016年7月22日 下午1:34:09 <br/>
- * @author PwenLee
- * @version
- * @see
- */
- public class BankOfChinaExchangeRate implements Serializable{
- private static final Integer DEAFULT_PAGESIZE = 20;
- private static final long serialVersionUID = -913877619191789389L;
- /**
- * 货币名称 中文简体
- */
- private String currency;
- /**
- * 现汇买入价
- */
- private BigDecimal buyingRate;
- /**
- * 现钞买入价
- */
- private BigDecimal cashBuyingRate;
- /**
- * 现汇卖出价
- */
- private BigDecimal sellingRate;
- /**
- * 现钞卖出价
- */
- private BigDecimal cashSellingRate;
- /**
- * 外管局中间价
- */
- private BigDecimal SAFEMiddleRate;
- /**
- * 中行折算价
- */
- private BigDecimal bankConvertRate;
- /**
- * 发布时间
- */
- private String dateTime;
- public String getCurrency() {
- return currency;
- }
- public void setCurrency(String currency) {
- this.currency = currency;
- }
- public BigDecimal getBuyingRate() {
- return buyingRate;
- }
- public void setBuyingRate(BigDecimal buyingRate) {
- this.buyingRate = buyingRate;
- }
- public BigDecimal getCashBuyingRate() {
- return cashBuyingRate;
- }
- public void setCashBuyingRate(BigDecimal cashBuyingRate) {
- this.cashBuyingRate = cashBuyingRate;
- }
- public BigDecimal getSellingRate() {
- return sellingRate;
- }
- public void setSellingRate(BigDecimal sellingRate) {
- this.sellingRate = sellingRate;
- }
- public BigDecimal getCashSellingRate() {
- return cashSellingRate;
- }
- public void setCashSellingRate(BigDecimal cashSellingRate) {
- this.cashSellingRate = cashSellingRate;
- }
- public BigDecimal getSAFEMiddleRate() {
- return SAFEMiddleRate;
- }
- public void setSAFEMiddleRate(BigDecimal sAFEMiddleRate) {
- SAFEMiddleRate = sAFEMiddleRate;
- }
- public BigDecimal getBankConvertRate() {
- return bankConvertRate;
- }
- public void setBankConvertRate(BigDecimal bankConvertRate) {
- this.bankConvertRate = bankConvertRate;
- }
- public String getDateTime() {
- return dateTime;
- }
- public void setDateTime(String dateTime) {
- this.dateTime = dateTime;
- }
- /**
- *
- * BankOfChinaExchangeRate:
- * date:日期 例入“2016-07-22”
- * time:时间 例如“05:30:00”
- * BankOfChinaCurrencyCode 枚举类
- * @author PwenLee
- * @param startDate
- * @param endDate
- * @param currencyCode
- * @return BankOfChinaExchangeRate
- */
- public BankOfChinaExchangeRate (String date, String time, BankOfChinaCurrencyCode currencyCode){
- List<String> context = getExchangeRate(date, time, currencyCode);
- this.currency = context.get(0);
- this.buyingRate = new BigDecimal(context.get(1));
- this.cashBuyingRate = new BigDecimal(context.get(2));
- this.sellingRate = new BigDecimal(context.get(3));
- this.cashSellingRate = new BigDecimal(context.get(4));
- this.SAFEMiddleRate = new BigDecimal(context.get(5));
- this.bankConvertRate = new BigDecimal(context.get(6));
- this.dateTime = context.get(7) + " " + context.get(8);
- }
- /**
- * 取当天凌晨05:30:00的数据
- */
- public BankOfChinaExchangeRate(){
- SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
- Date date=new Date();
- String nowDate=sdf.format(date);
- List<String> context = getExchangeRate(nowDate, "05:30:00", BankOfChinaCurrencyCode.USD);
- this.currency = context.get(0);
- this.buyingRate = new BigDecimal(context.get(1));
- this.cashBuyingRate = new BigDecimal(context.get(2));
- this.sellingRate = new BigDecimal(context.get(3));
- this.cashSellingRate = new BigDecimal(context.get(4));
- this.SAFEMiddleRate = new BigDecimal(context.get(5));
- this.bankConvertRate = new BigDecimal(context.get(6));
- this.dateTime = context.get(7) + " " + context.get(8);
- }
- /**
- * 模拟请求url,返回html源码
- * @author PwenLee
- * @param url
- * @return
- */
- private static String GetHtml(String url) {
- String html = null;
- HttpClient httpClient = new DefaultHttpClient();
- httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 20000);
- HttpGet httpGet = new HttpGet(url);
- try {
- HttpResponse httpResponse = httpClient.execute(httpGet);
- int resStatu = httpResponse.getStatusLine().getStatusCode();
- if (resStatu == HttpStatus.SC_OK) {
- HttpEntity entity = httpResponse.getEntity();
- if (entity != null) {
- html = EntityUtils.toString(entity, "utf-8");
- }
- }
- } catch (Exception e) {
- //TODO 打成logger
- System.out.println("Connect " + url + " error");
- e.printStackTrace();
- } finally {
- httpClient.getConnectionManager().shutdown();
- }
- return html;
- }
- private List<String> getExchangeRate(String date, String time, BankOfChinaCurrencyCode currencyCode){
- Integer totalPage = totalPage(date, time, currencyCode);
- List<String> contextList = new ArrayList<String>();
- if(totalPage <= 0){
- //TODO logger
- return contextList;
- }
- String context = "";
- for(int i=totalPage;i>=0;i--){
- String url = "http://srh.bankofchina.com/search/whpj/search.jsp?erectDate="+date+"¬hing="+date+"&pjname="+currencyCode.getCode()+"&page="+i;
- String html = GetHtml(url);
- Document doc = Jsoup.parse(html);
- Elements linkElements = doc.getElementsByClass("BOC_main");
- Elements datas = linkElements.get(0).getElementsByTag("tr");
- for (Element ele : datas) {
- if(ele.text().indexOf(time) != -1){
- context = ele.text();
- break;
- }
- }
- if(context != ""){ //TODO 换成StringUtils.isNotBlank
- break;
- }
- }
- if(context == "") {//TODO 换成StringUtils.isBlank
- //TODO logger
- return contextList;
- }else{
- contextList = Arrays.asList(context.split(" "));
- }
- return contextList;
- }
- public static Integer totalPage(){
- Integer totalPage = 0;
- try{
- SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
- Date date=new Date();
- String nowDate=sdf.format(date);
- String url = "http://srh.bankofchina.com/search/whpj/search.jsp?erectDate="+nowDate+"¬hing="+nowDate+"&pjname="+BankOfChinaCurrencyCode.USD.getCode();
- String html = GetHtml(url);
- //截取网页总条数变量
- String stringTemp = html.substring(html.indexOf("m_nRecordCount = "));
- //获取变量的值
- String totalcount = stringTemp.substring(stringTemp.indexOf("m_nRecordCount = ")+"m_nRecordCount = ".length(),stringTemp.indexOf(";"));
- Integer totalnum = Integer.valueOf(totalcount);
- if(totalnum % DEAFULT_PAGESIZE == 0){
- totalPage = totalnum/DEAFULT_PAGESIZE;
- }else{
- totalPage = totalnum/DEAFULT_PAGESIZE+1;
- }
- }catch(Exception e){
- //TODO 打成logger
- }
- return totalPage;
- }
- public static Integer totalPage(String date, String time, BankOfChinaCurrencyCode currencyCode){
- Integer totalPage = 0;
- try{
- String url = "http://srh.bankofchina.com/search/whpj/search.jsp?erectDate="+date+"¬hing="+date+"&pjname="+currencyCode.getCode();
- String html = GetHtml(url);
- //截取网页总条数变量
- String stringTemp = html.substring(html.indexOf("m_nRecordCount = "));
- //获取变量的值
- String totalcount = stringTemp.substring(stringTemp.indexOf("m_nRecordCount = ")+"m_nRecordCount = ".length(),stringTemp.indexOf(";"));
- Integer totalnum = Integer.valueOf(totalcount);
- if(totalnum % DEAFULT_PAGESIZE == 0){
- totalPage = totalnum/DEAFULT_PAGESIZE;
- }else{
- totalPage = totalnum/DEAFULT_PAGESIZE+1;
- }
- }catch(Exception e){
- //TODO 打成logger
- }
- return totalPage;
- }
- @Override
- public String toString() {
- return "BankOfChinaExchangeRate [currency=" + currency
- + ", buyingRate=" + buyingRate + ", cashBuyingRate="
- + cashBuyingRate + ", sellingRate=" + sellingRate
- + ", cashSellingRate=" + cashSellingRate + ", SAFEMiddleRate="
- + SAFEMiddleRate + ", bankConvertRate=" + bankConvertRate
- + ", dateTime=" + dateTime + "]";
- }
- }
jsoup简单的爬取网页数据的更多相关文章
- 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)
urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...
- python之爬取网页数据总结(一)
今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests Beautifulsoup4 lxml 三个插件 ...
- python爬虫——爬取网页数据和解析数据
1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.只要浏览器能够做的事情,原则上,爬虫都能够做到. 2 ...
- 使用 Python 爬取网页数据
1. 使用 urllib.request 获取网页 urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 ...
- 使用XPath爬取网页数据
我们以我的博客为例,来爬取我所有写过的博客的标题. 首先,打开我的博客页面,右键“检查”开始进行网页分析.我们选中博客标题,再次右键“检查”即可找到标题相应的位置,我们继续点击右键,选择Copy,再点 ...
- 03:requests与BeautifulSoup结合爬取网页数据应用
1.1 爬虫相关模块命令回顾 1.requests模块 1. pip install requests 2. response = requests.get('http://www.baidu.com ...
- 使用puppeteer爬取网页数据实践小结
简单介绍Puppeteer Puppeteer是一个Node库,它通过DevTools协议提供高级API来控制Chrome或Chromium.Puppeteer默认以无头方式运行,但可以配置为有头方式 ...
- Selenium+Tesseract-OCR智能识别验证码爬取网页数据
1.项目需求描述 通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的动态识别,将获取到的数据存到数据库. 2.整体思路 1.通过Selenium技术,无窗口模式打开浏览器 ...
- 【推荐】oc解析HTML数据的类库(爬取网页数据)
TFhpple是一个用于解析html数据的第三方库,本人感觉功能还算可以,只不过在使用前必须配置项目. 配置 1.导入libxml2.tbd 2.设置编译路径 使用 这里使用一个例子来说明 http: ...
随机推荐
- 使用github与jekyll搭建个人博客(一)
虽然使用博客园还没有多久,但是最近看到一些大神的博客觉得很是炫酷.于是突发奇想,想要搭建自己的博客站点儿.编程菜鸟一枚,还是想要记录下最近的搭建博客经历. 使用github搭建个人博客的方式有很多,百 ...
- JavaScript对异常的处理
JavaScript提供了一套异常处理机制.当查出事故时,你的程序应该抛出一个异常: var add=function(a,b){ if(typeof a !== 'number' || typeof ...
- WP7推送通知服务
原文地址http://www.cnblogs.com/Joetao/articles/2214482.html (一)为什么使用推送通知服务(1)Windows Phone执行模型决定只有一个第三方的 ...
- stanford-parser使用说明
主意:本说明文档针对stanford-parser-full-2014-06-16.不同版本的parser,其功能和表示形式可能会略有不同.但总体不会有太大差异 Stanford parser是一款较 ...
- highcharts 不显示X轴 Y轴 刻度
xAxis: { tickWidth:0, //设置刻度标签宽度 lineColor:'#ffffff',//设置坐标颜色 lineWidth:0, //设置坐标宽度 la ...
- C# 调用restful服务开源库
.NET环境下我们想调用其它开放平台的服务接口,不需要自己去实现底层,开源的库用起来会很方便 hammock http://www.cnblogs.com/shanyou/archive/2012/0 ...
- nsq初探
一. 安装 参考:http://nsq.io/deployment/installing.htmlhttp://www.baiyuxiong.com/?p=873 (推荐.) 不推荐直接把官方的 ...
- Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse
框架学习前言 这个模块是面向Spring的,Spring的学习我是这么想的: 1.简单介绍Spring,主要是从网上借鉴一些重点 2.尽量说明清楚Spring的使用方法以及细节点 3.尽量以自己的理解 ...
- Linux文件系统应用---系统数据备份和迁移(用户角度)
1 前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的 “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决. 之前的文章对Linux的文 ...
- FB引擎系列-之CloudSand
CloudSand,欲打破之前的集中版本制作的模式, http://code.taobao.org/p/cloudsand包含服务器端代码(php)和客户端代码(unity) EasyDown的时 ...