- 浏览: 8328 次
- 性别:
- 来自: 深圳
-
最近访客 更多访客>>
文章分类
- 全部博客 (6)
- Java (2)
- JavaScript (2)
- Oracle (0)
- 线程与Java并发工具包 (0)
- Java RMI (0)
- JBOSS (0)
- WebLogic (0)
- Dojo (0)
- DWR (0)
- JSON (0)
- JSONP (0)
- AjaxTags (0)
- jQuery (0)
- Prototype (0)
- PL/SQL (0)
- Java 正则表达式 (0)
- Struts2 (0)
- Java与设计模式 (0)
- JAAS (0)
- HtmlUtil (1)
- CSS (0)
- FreeMarker (0)
- JFree_Chart (0)
- JSP (0)
- Servlet (0)
- Spring (0)
- Swing (0)
- JMS (0)
- Java Service (0)
- 生活 (1)
最新评论
-
Heppy:
向楼主的无私奉献致敬
利用HtmlUtil 从网页提取数据 -
gowhere:
问一下,jre1.6这个java web start.dll ...
掌握 Java Web Start 技术 一
最近炒股,发现几个好的网站(散户大家庭http://www.shdjt.com/ 股票大单网http://www.gupiaodadan.cn/),提供了每天大量分析数据------入主力持仓排名、大单买入排名、板块资金流入排名、DDX排名等等,于是我利用HtmlUtil 工具包,写了一个程序,把这些数据从网页上提取出来,保存在我自己的Oracle数据库里面,以便进行统计分析,从中找出规律,呵呵。。。。希望大发一笔,下面是具体的程序。
【开发环境】MyEclipse6.5.1、Oracle9i
【所需要的库文件】
htmlunit-2.5.zip 下载地址 http://htmlunit.sourceforge.net/
Oracle9i JDBC驱动程序classes12.jar 在Oracle9i的安装目录下面的JDBC文件夹里有
【数据库设计】
--股票目录
drop table gpml;
create table gpml(
gpdm varchar2(6) primary key,--股票代码
gpmc varchar2(20),--股票名称
ltgs number(10),--流通股数
zgs number(10),--总股数
ltbl number(10),--流通比例
mgyl number,--每股盈利
jzc number,--净资产
jlr number,--净利润
zxsj varchar2(2500),--最新事件
bz varchar2(2500)--备注说明
);
--板块目录
create table bkml(
bkid number primary key,
bkmc varchar2(100),
bc varchar2(100)
);
--每日实时数据
--注意:此表即使股票停牌,也有把最近的DDX数据放入了
--写一个存储过程,生成每日的排名:参数是日期,注意那些停牌的哦,呵呵。。。。
create table daydata(
gpdm varchar2(6),
rq date,
price number,
zf number,
ddx number,
ddy number,
ddz number,
ddx_sixty number,
ddy_sixty number,
ddx_tenl number,
ddx_tenc number,
tddc number,
ddc number,
zdc number,
xdc number,
hyd number,
dsb number,
tdmr number,
tdmc number,
ddmr number,
ddmc number,
zdmr number,
zdmc number,
xdmr number,
xdmc number,
hsl number,
lb number,
ddxpm number,
ddypm number,
ddzpm number,
constraint pk_daydata primary key(gpdm,rq)
);
--两市大单净买入全部排名
create table ddmrpm(
gpdm varchar2(6),
rq date,
pm number,
ddmr number,
ddmc number,
mrmcc number,
cjl number,
jg number,
constraint pk_ddmrpm primary key(gpdm,rq)
);
--5日股票大单净买入排名50
create table fiveddmrpm(
gpdm varchar2(6),
rq date,
pm number,
ddmr number,
ddmc number,
mrmcc number,
cjl number,
jg number,
constraint pk_fiveddmrpm primary key(gpdm,rq)
);
--10日股票大单净买入排名50
create table tenddmrpm(
gpdm varchar2(6),
rq date,
pm number,
ddmr number,
ddmc number,
mrmcc number,
cjl number,
jg number,
constraint pk_tenddmrpm primary key(gpdm,rq)
);
--5日股票大单净卖出排名50
create table fiveddmcpm(
gpdm varchar2(6),
rq date,
pm number,
ddmr number,
ddmc number,
mrmcc number,
cjl number,
jg number,
constraint pk_fiveddmcpm primary key(gpdm,rq)
);
--10日股票大单净卖出排名50
create table tenddmcpm(
gpdm varchar2(6),
rq date,
pm number,
ddmr number,
ddmc number,
mrmcc number,
cjl number,
jg number,
constraint pk_tenddmcpm primary key(gpdm,rq)
);
--沪市Level-2数据 DDX 排名前50
--注意:此表如果股票停牌,没有把最近的DDX数据放入了
create table ddxpm(
gpdm varchar2(6),
rq date,
jg number,
zf number,
ddx number,
ddxpm number,
ten_phts number,
ten_lxphts number,
ddy number,
ddypm number,
ddz number,
ddzpm number,
constraint pk_ddxpm primary key(gpdm,rq)
);
--两市板块资金净流入排名
create table bkzjlrpm(
bkid number,
pm number,
rq date,
lr number,
lc number,
jlr number,--尽流入
gpdm varchar2(20),--代表个股
constraint pk_bkzjlrpm primary key(bkid,rq)
);
--5日两市板块资金净流入排名
create table fivebkzjlrpm(
bkid number,
rq date,
pm number,
lr number,
lc number,
jlr number,--尽流入
constraint pk_fivebkzjlrpm primary key(bkid,rq)
);
--10日两市板块资金净流入排名
create table tenbkzjlrpm(
bkid number,
pm number,
rq date,
lr number,
lc number,
jlr number,--尽流入
constraint pk_tenbkzjlrpm primary key(bkid,rq)
);
--主力持仓排名(最新更新:2009年5月26日),把握主力资金的动向!
create table zlccpm(
gpdm varchar2(6),
rq date,
adddec number,--增减性质 1代表增 0代表减
dayNum number, --1日 5日 10日
userType number,--主力分类:0主力 1特大户 2大户 3散户
pm number,--排名
per number,--增减百分比
constraint pk_zlccpm primary key(gpdm,rq,adddec,dayNum,userType)
)
[用来进行排名的存储过程]
create or replace procedure produce_pm(in_Date IN daydata.rq%TYPE) is
CURSOR cur_ddxpm is
SELECT gpdm
FROM daydata
WHERE rq = trunc(in_Date)
AND price > 0
ORDER BY ddx desc,ddy desc,ddz desc;
CURSOR cur_ddypm is
SELECT gpdm
FROM daydata
WHERE rq = trunc(in_Date)
AND price > 0
ORDER BY ddy desc,ddx desc,ddz desc;
CURSOR cur_ddzpm is
SELECT gpdm
FROM daydata
WHERE rq = trunc(in_Date)
AND price > 0
ORDER BY ddz desc,ddx desc,ddy desc;
curIndex NUMBER :=0;
BEGIN
FOR rec IN cur_ddxpm LOOP
curIndex := curIndex + 1;
update daydata set ddxpm=curIndex where gpdm=rec.gpdm and rq=trunc(in_date);
END LOOP;
curIndex:=0;
FOR rec IN cur_ddypm LOOP
curIndex := curIndex + 1;
update daydata set ddypm=curIndex where gpdm=rec.gpdm and rq=trunc(in_date);
END LOOP;
curIndex:=0;
FOR rec IN cur_ddzpm LOOP
curIndex := curIndex + 1;
update daydata set ddzpm=curIndex where gpdm=rec.gpdm and rq=trunc(in_date);
END LOOP;
commit;
end produce_pm;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class ConnectionManager { public static Connection getConnection() { Connection conn = null; try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); String url = "jdbc:oracle:oci8:@"; try { String url1 = System.getProperty("JDBC_URL"); if (url1 != null) url = url1; } catch (Exception e) { e.printStackTrace(); } conn = DriverManager.getConnection(url, "gp", "gp"); } catch (Exception e1) { e1.printStackTrace(); } return conn; } }
import java.awt.Dimension; import java.awt.Toolkit; import java.io.IOException; import java.net.MalformedURLException; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlDivision; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlTable; import com.gargoylesoftware.htmlunit.html.HtmlTableRow; public class DataImport extends javax.swing.JFrame { String zlccDate = null;//主力持仓,赢富数据要慢一天 /** * 构造函数 */ public DataImport() { initComponents(); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, -1); this.txtZlcc.setText(new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); this.txtDate.setText(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getPreferredSize(); if (frameSize.height > screenSize.height) frameSize.height = screenSize.height; if (frameSize.width > screenSize.width) frameSize.width = screenSize.width; this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() { jPanel1 = new javax.swing.JPanel(); btnImport = new javax.swing.JButton(); txtDate = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); txtStatus = new javax.swing.JTextArea(); txtZlcc = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); btnImport.setText("\u5f00\u59cb\u5bfc\u5165\u6570\u636e"); btnImport.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnImportActionPerformed(evt); } }); txtStatus.setColumns(20); txtStatus.setRows(5); jScrollPane1.setViewportView(txtStatus); jLabel1.setText("\u4e3b\u529b\u6301\u4ed3\u6392\u540d"); org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add( jPanel1Layout.createSequentialGroup().add( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(jPanel1Layout.createSequentialGroup().addContainerGap().add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 425, Short.MAX_VALUE)).add( jPanel1Layout.createSequentialGroup().add(49, 49, 49).add( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(btnImport).add( jPanel1Layout.createSequentialGroup().add(txtDate, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 136, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(16, 16, 16).add(jLabel1).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(txtZlcc, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 121, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))).add(37, 37, 37))).addContainerGap())); jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add( jPanel1Layout.createSequentialGroup().addContainerGap().add( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE).add(txtDate, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(jLabel1).add(txtZlcc, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add( btnImport).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 352, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addContainerGap())); getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); pack(); }// </editor-fold> private void btnImportActionPerformed(java.awt.event.ActionEvent evt) { SwingWorker<Object, Object> sw = new SwingWorker<Object, Object>() { protected Object doInBackground() throws Exception { importData(); return null; } }; sw.execute(); } /** * 按钮事件,正式套入数据 */ private void importData() { String importDate = this.txtDate.getText(); zlccDate=this.txtZlcc.getText(); final WebClient webClient = new WebClient(); //1 首先导入每日数据(来自散户大家庭) this.txtStatus.append("开始导入http://www.shdjt.com/中的每日数据........"); try { importDayData(webClient, importDate); this.txtStatus.append("\n成功!"); } catch (Exception e) { e.printStackTrace(); this.txtStatus.append("\n失败!"); return; } this.txtStatus.append("\n"); //2 当日板块、五日板块、十日板块资金流入 this.txtStatus.append("\n开始导入当日板块、五日板块、十日板块资金流入........"); try { importBkData(webClient, zlccDate); this.txtStatus.append("\n成功!"); } catch (Exception e) { e.printStackTrace(); this.txtStatus.append("\n失败!"); return; } this.txtStatus.append("\n"); //3 两市大单净买入全部排名 当日、五日、十日 this.txtStatus.append("\n开始导入两市大单净买入全部排名 当日、五日、十日........"); try { importDDmrpm(webClient, importDate); this.txtStatus.append("\n成功!"); } catch (Exception e) { e.printStackTrace(); this.txtStatus.append("\n失败!"); return; } this.txtStatus.append("\n"); //4 沪市Level-2数据 DDX 排名前50 this.txtStatus.append("\n开始导入沪市Level-2数据 DDX 排名前50........"); try { importDDXpm(webClient, importDate); this.txtStatus.append("\n成功!"); } catch (Exception e) { e.printStackTrace(); this.txtStatus.append("\n失败!"); return; } this.txtStatus.append("\n"); //5 主力持仓排名 this.txtStatus.append("\n开始导入主力持仓排名........"); try { importZlCCData(webClient, importDate); this.txtStatus.append("\n成功!"); } catch (Exception e) { e.printStackTrace(); this.txtStatus.append("\n失败!"); return; } this.txtStatus.append("\n"); //6 调用存储过程,对每日数据进行排名(DDX,DDY,DDZ) this.txtStatus.append("\n开始执行存储过程........"); try { callProcForPM(importDate); this.txtStatus.append("\n成功!"); } catch (Exception e) { e.printStackTrace(); this.txtStatus.append("\n失败!"); return; } this.txtStatus.append("\n-----------------全部成功-----------------"); } /** * 每日详细数据(散户大家庭) * @param webClient * @param importDate * @throws Exception */ public void importDayData(WebClient webClient, String importDate) throws Exception { final HtmlPage page = webClient.getPage("http://www.shdjt.com/"); final HtmlTable tableElement = (HtmlTable) page.getByXPath("//table[@bgcolor='#FFffff']").get(0); List<HtmlTableRow> list = tableElement.getRows(); int size = list.size(); List<HtmlTableRow> list2 = list.subList(2, size); PreparedStatement pstmt = null; Connection conn = null; Number a; NumberFormat nf = NumberFormat.getInstance(); try { conn = ConnectionManager.getConnection(); pstmt = conn.prepareStatement("insert into daydata(gpdm,rq,price,zf,ddx,ddy,ddz,ddx_sixty,ddy_sixty,ddx_tenl,ddx_tenc,tddc,ddc,zdc,xdc,hyd,dsb,tdmr,tdmc,ddmr,ddmc,zdmr,zdmc,xdmr,xdmc,hsl,lb) " + "values (?,to_date('" + importDate + "','yyyy-MM-dd'),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); for (final HtmlTableRow row : list2) { pstmt.setString(1, isNull(row.getCell(3).asText()));// 股票代码 pstmt.setFloat(2, Float.valueOf(isNull(row.getCell(5).asText())).floatValue());// 价格 pstmt.setFloat(3, Float.valueOf(isNull(row.getCell(6).asText())).floatValue());// 涨幅 pstmt.setFloat(4, Float.valueOf(isNull(row.getCell(7).asText())).floatValue());// pstmt.setFloat(5, Float.valueOf(isNull(row.getCell(8).asText())).floatValue());// pstmt.setFloat(6, nf.parse(row.getCell(9).asText()).floatValue());//DDZ pstmt.setFloat(7, Float.valueOf(isNull(row.getCell(10).asText())).floatValue());// pstmt.setFloat(8, Float.valueOf(isNull(row.getCell(11).asText())).floatValue());// pstmt.setInt(9, Integer.valueOf(isNull(row.getCell(12).asText())).intValue());// 10日次数 pstmt.setInt(10, Integer.valueOf(isNull(row.getCell(13).asText())).intValue());// 10日次数连续 pstmt.setFloat(11, Float.valueOf(isNull(row.getCell(14).asText())).floatValue());// pstmt.setFloat(12, Float.valueOf(isNull(row.getCell(15).asText())).floatValue());// pstmt.setFloat(13, Float.valueOf(isNull(row.getCell(16).asText())).floatValue());// pstmt.setFloat(14, Float.valueOf(isNull(row.getCell(17).asText())).floatValue());// pstmt.setInt(15, Integer.valueOf(isNull(row.getCell(18).asText())).intValue());// 活跃度 pstmt.setFloat(16, Float.valueOf(isNull(row.getCell(19).asText())).floatValue());// pstmt.setFloat(17, Float.valueOf(isNull(row.getCell(20).asText())).floatValue());// pstmt.setFloat(18, Float.valueOf(isNull(row.getCell(21).asText())).floatValue());// pstmt.setFloat(19, Float.valueOf(isNull(row.getCell(22).asText())).floatValue());// pstmt.setFloat(20, Float.valueOf(isNull(row.getCell(23).asText())).floatValue());// pstmt.setFloat(21, Float.valueOf(isNull(row.getCell(24).asText())).floatValue());// pstmt.setFloat(22, Float.valueOf(isNull(row.getCell(25).asText())).floatValue());// pstmt.setFloat(23, Float.valueOf(isNull(row.getCell(26).asText())).floatValue());// pstmt.setFloat(24, Float.valueOf(isNull(row.getCell(27).asText())).floatValue());// pstmt.setFloat(25, Float.valueOf(isNull(row.getCell(28).asText())).floatValue());// pstmt.setFloat(26, Float.valueOf(isNull(row.getCell(29).asText())).floatValue());// pstmt.addBatch(); } pstmt.executeBatch(); conn.commit(); } finally { try { pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static String isNull(String s) { String p = "0.0"; int leng = s.length(); if (s != null && leng > 0) p = s; return p; } /** * 当日板块、五日板块、十日板块资金流入 * @param webClient * @param currentDate */ public void importBkData(WebClient webClient, String currentDate) throws Exception { importBkzjData(webClient, "http://www.gupiaodadan.cn/bankuai.jsp", "bkzjlrpm", currentDate); importBkzjData(webClient, "http://www.gupiaodadan.cn/bankuaimore-2", "fivebkzjlrpm", currentDate); importBkzjData(webClient, "http://www.gupiaodadan.cn/bankuaimore-1", "tenbkzjlrpm", currentDate); } public void importBkzjData(WebClient webClient, String url, String tableName, String date) throws Exception { PreparedStatement pstmt = null; Connection conn = null; try { final HtmlPage page = webClient.getPage(url); final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@class='tablecontent']").get(0); HtmlTable tableElement = (HtmlTable) div.getHtmlElementsByTagName("table").get(0); List<HtmlTableRow> list = tableElement.getRows(); int size = list.size(); List<HtmlTableRow> list2 = list.subList(1, size); conn = ConnectionManager.getConnection(); if (tableName.equalsIgnoreCase("bkzjlrpm")) pstmt = conn.prepareStatement("insert into " + tableName + "(bkid,rq,pm,lr,lc,jlr,gpdm) values (?,to_date('" + date + "','yyyy-MM-dd'),?,?,?,?,?)"); else pstmt = conn.prepareStatement("insert into " + tableName + "(bkid,rq,pm,lr,lc,jlr) values (?,to_date('" + date + "','yyyy-MM-dd'),?,?,?,?)"); for (final HtmlTableRow row : list2) { int pm = Integer.valueOf(row.getCell(0).asText());// 排名 HtmlElement tdElement = row.getHtmlElementsByTagName("td").get(1); HtmlElement aElement = tdElement.getHtmlElementsByTagName("a").get(0); String strUrl = aElement.getAttribute("href"); int startIndex = strUrl.lastIndexOf("-"); String bkId = strUrl.substring(startIndex + 1, strUrl.length()); float lr = Float.valueOf(row.getCell(2).asText()).floatValue(); float lc = Float.valueOf(row.getCell(3).asText()).floatValue(); float jlr = Float.valueOf(row.getCell(4).asText()).floatValue(); pstmt.setInt(1, Integer.valueOf(bkId).intValue()); pstmt.setInt(2, pm); pstmt.setFloat(3, lr); pstmt.setFloat(4, lc); pstmt.setFloat(5, jlr); if (tableName.equalsIgnoreCase("bkzjlrpm")) { tdElement = row.getHtmlElementsByTagName("td").get(5); aElement = tdElement.getHtmlElementsByTagName("a").get(0); strUrl = aElement.getAttribute("href"); String gpdm = strUrl.substring(strUrl.length() - 6); pstmt.setString(6, gpdm); } pstmt.addBatch(); } pstmt.executeBatch(); conn.commit(); } finally { try { pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 两市大单净买入全部排名 当日、五日、十日 * @param webClient * @param currentDate * @throws Exception */ public void importDDmrpm(WebClient webClient, String currentDate) throws Exception { // 当日买卖排名 String currentURL = "http://www.gupiaodadan.cn/all.jsp"; importDdMrData(webClient, currentURL, "ddmrpm", currentDate); // 五日买入 String fivemrURL = "http://www.gupiaodadan.cn/more-3"; importDdMrData(webClient, fivemrURL, "fiveddmrpm", currentDate); // 十日买入 String tenmrURL = "http://www.gupiaodadan.cn/more-4"; importDdMrData(webClient, tenmrURL, "tenddmrpm", currentDate); // 五日卖出 String fivemcURL = "http://www.gupiaodadan.cn/more-5"; importDdMrData(webClient, fivemcURL, "fiveddmcpm", currentDate); // 十日卖出 String tenmcURL = "http://www.gupiaodadan.cn/more-6"; importDdMrData(webClient, tenmcURL, "tenddmcpm", currentDate); } public static void importDdMrData(WebClient webClient, String url, String tableName, String date) throws Exception { PreparedStatement pstmt = null; Connection conn = null; NumberFormat nf = NumberFormat.getInstance(); try { final HtmlPage page = webClient.getPage(url); final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@class='tablecontent']").get(0); HtmlTable tableElement = (HtmlTable) div.getHtmlElementsByTagName("table").get(0); List<HtmlTableRow> list = tableElement.getRows(); int size = list.size(); List<HtmlTableRow> list2 = list.subList(1, size); conn = ConnectionManager.getConnection(); pstmt = conn.prepareStatement("insert into " + tableName + "(gpdm,rq,pm,ddmr,ddmc,mrmcc,cjl,jg) values (?,to_date('" + date + "','yyyy-MM-dd'),?,?,?,?,?,?)"); for (final HtmlTableRow row : list2) { int pm = Integer.valueOf(row.getCell(0).asText()); String gpdm = row.getCell(1).asText(); int ddmr = nf.parse(row.getCell(3).asText()).intValue(); int ddmc = nf.parse(row.getCell(4).asText()).intValue(); int mrmcc = ddmr - ddmc; int cjl = nf.parse(row.getCell(5).asText()).intValue(); float jg = Float.valueOf(row.getCell(6).asText()).floatValue(); pstmt.setString(1, gpdm); pstmt.setInt(2, pm); pstmt.setInt(3, ddmr); pstmt.setInt(4, ddmc); pstmt.setInt(5, mrmcc); pstmt.setInt(6, cjl); pstmt.setFloat(7, jg); pstmt.addBatch(); } pstmt.executeBatch(); conn.commit(); } finally { try { pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 沪市Level-2数据 DDX 排名前50 * @param webClient * @param curDate * @throws Exception */ public void importDDXpm(WebClient webClient, String curDate) throws Exception { final HtmlPage page = webClient.getPage("http://www.gupiaodadan.cn/level2-home-1"); final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@class='tablecontent']").get(0); HtmlTable tableElement = (HtmlTable) div.getHtmlElementsByTagName("table").get(0); List<HtmlTableRow> list = tableElement.getRows(); int size = list.size(); List<HtmlTableRow> list2 = list.subList(2, size); PreparedStatement pstmt = null; Connection conn = null; try { conn = ConnectionManager.getConnection(); pstmt = conn.prepareStatement("insert into ddxpm( gpdm,rq,jg,zf,ddx,ddxpm,ten_phts,ten_lxphts,ddy,ddypm,ddz,ddzpm) " + "values (?,to_date('" + curDate + "','yyyy-MM-dd'),?,?,?,?,?,?,?,?,?,?)"); for (final HtmlTableRow row : list2) { pstmt.setString(1, row.getCell(0).asText()); pstmt.setFloat(2, Float.valueOf(row.getCell(2).asText()).floatValue()); pstmt.setFloat(3, Float.valueOf(row.getCell(3).asText()).floatValue()); pstmt.setFloat(4, Float.valueOf(row.getCell(4).asText()).floatValue()); pstmt.setInt(5, Integer.valueOf(row.getCell(5).asText()).intValue()); pstmt.setInt(6, Integer.valueOf(row.getCell(6).asText()).intValue()); pstmt.setInt(7, Integer.valueOf(row.getCell(7).asText()).intValue()); pstmt.setFloat(8, Float.valueOf(row.getCell(8).asText()).floatValue()); pstmt.setInt(9, Integer.valueOf(row.getCell(9).asText()).intValue()); pstmt.setFloat(10, Float.valueOf(row.getCell(10).asText()).floatValue()); pstmt.setInt(11, Integer.valueOf(row.getCell(11).asText()).intValue()); pstmt.addBatch(); } pstmt.executeBatch(); conn.commit(); } finally { try { pstmt.close(); conn.close(); } catch (SQLException e) { } } } /** * 主力持仓排名 * @param webClient * @param sDate * @throws Exception */ public static void importZlCCData(WebClient webClient, String sDate) throws Exception { PreparedStatement pstmt = null; Connection conn = null; try { conn = ConnectionManager.getConnection(); pstmt = conn.prepareStatement("insert into zlccpm(gpdm,rq,adddec,dayNum,userType,pm,per) " + "values (?,to_date('" + sDate + "','yyyy-MM-dd'),?,?,?,?,?)"); final HtmlPage page = webClient.getPage("http://www.gupiaodadan.cn/topview-search.jsp"); List<?> listDivs = page.getByXPath("//div[@class=\"fr02\"]"); //adddec number,--增减性质 1代表增 0代表减 //dayNum number, --1代表1日 5代表5日 10代表10日 //userType number,--主力分类:0主力 1特大户 2大户 3散户 // 1日主力增仓 HtmlDivision div = (HtmlDivision) listDivs.get(0); processData(div, pstmt, 1, 1, 0); // 1日特大户增仓 div = (HtmlDivision) listDivs.get(1); processData(div, pstmt, 1, 1, 1); // 1日大户增仓 div = (HtmlDivision) listDivs.get(2); processData(div, pstmt, 1, 1, 2); // 1日散户减仓 div = (HtmlDivision) listDivs.get(3); processData(div, pstmt, 0, 1, 3); //------------------------------------------- // 5日主力增仓 div = (HtmlDivision) listDivs.get(4); processData(div, pstmt, 1, 5, 0); // 5日特大户增仓 div = (HtmlDivision) listDivs.get(5); processData(div, pstmt, 1, 5, 1); // 5日大户增仓 div = (HtmlDivision) listDivs.get(6); processData(div, pstmt, 1, 5, 2); // 5日散户减仓 div = (HtmlDivision) listDivs.get(7); processData(div, pstmt, 0, 5, 3); //------------------------------------------- // 10日主力增仓 div = (HtmlDivision) listDivs.get(8); processData(div, pstmt, 1, 10, 0); // 10日特大户增仓 div = (HtmlDivision) listDivs.get(9); processData(div, pstmt, 1, 10, 1); // 10日大户增仓 div = (HtmlDivision) listDivs.get(10); processData(div, pstmt, 1, 10, 2); // 10日散户减仓 div = (HtmlDivision) listDivs.get(11); processData(div, pstmt, 0, 10, 3); pstmt.executeBatch(); conn.commit(); } finally { try { pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void processData(HtmlDivision div, PreparedStatement pstmt, int adddec, int dayNum, int userType) throws Exception { HtmlTable tableElement = (HtmlTable) div.getHtmlElementsByTagName("table").get(0); List<HtmlTableRow> list = tableElement.getRows(); int size = list.size(); List<HtmlTableRow> list2 = list.subList(1, size); // gpdm,rq,adddec,dayNum,userType,pm,per for (final HtmlTableRow row : list2) { pstmt.setInt(5, Integer.parseInt(row.getCell(0).asText()));// 排名 HtmlElement tdElement = row.getHtmlElementsByTagName("td").get(1); HtmlElement aElement = tdElement.getHtmlElementsByTagName("a").get(0); String strUrl = aElement.getAttribute("href"); int startIndex = strUrl.lastIndexOf("-"); String gpdm = strUrl.substring(startIndex + 1, strUrl.length()); pstmt.setString(1, gpdm); pstmt.setInt(2, adddec); pstmt.setInt(3, dayNum); pstmt.setInt(4, userType); pstmt.setFloat(6, Float.parseFloat(row.getCell(2).asText()));//百分比 pstmt.addBatch(); } } private void callProcForPM(String strDate) throws Exception { Connection conn = ConnectionManager.getConnection(); CallableStatement cs = null; try { cs = conn.prepareCall("{call produce_pm(?)}"); cs.setDate(1, new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse(strDate).getTime())); cs.executeUpdate(); } finally { try { cs.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new DataImport().setVisible(true); } }); } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JButton btnImport; private javax.swing.JLabel jLabel1; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextField txtDate; private javax.swing.JTextArea txtStatus; private javax.swing.JTextField txtZlcc; // End of variables declaration//GEN-END:variables }
相关推荐
在本案例中,我们关注的是如何利用一个名为`htmlutil`的工具包来从HTML网页中提取数据,特别是图片资源。这个过程涉及到网页解析、DOM操作以及HTTP请求。 首先,`htmlutil`包可能是一个专门为处理HTML文档而设计的...
其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始...
HTMLUtil是一个基于Java的工具,主要用于处理HTML相关的任务,如网页解析、数据提取等。在进行HTMLUtil的开发或使用时,常常会依赖一系列的外部库,这些库可以帮助我们更方便地操作HTML文档。在提供的文件列表中,...
在网页信息抓取(Web Scraping)中,这种能力特别重要,因为可以自动化地从动态加载或者需要交互的网站上获取数据。 HTMLUnit是一个流行的无头浏览器库,常被用作Java平台上的Web测试工具。HTMLUnit模拟了一个完整...
3. **提取数据**:利用Jsoup的选择器或者遍历DOM树,提取出每一条专利的关键信息,如专利号、发明人、专利类型、申请日期等。 4. **处理分页**:如果专利数据分布在多个页面,需要识别并处理分页链接,循环执行上述...
这种转换通常在数据展示、网页报告或者需要在Web环境中浏览Excel数据的场景中使用。 【描述】中提到的“PIO万能转换”可能是指Apache POI项目,这是一个流行的开源库,用于读写Microsoft Office格式的文件,包括...
这两个类通过html的路径,将html提取为html内容的字符串,然后进行提取body里的内容,进行去除行间样式以及css等,然后还可以去除空行等,筛选出不需要的标签,当前类保留img标签,转换后可以自行设置img网络地址,...
html 工具类 * @param disrPath 生成html的存放路径 * @param fileName 生成html名字 * @return void 返回类型
最新版htmlutil,java无界面浏览器开发包
通过理解并熟练掌握上述知识,开发者可以更有效地从网页中提取有价值的数据,无论是用于数据分析、网站爬虫还是其他自动化任务。尤其在处理大量网页数据时,合理运用C#中的这些功能,可以大大提高开发效率和数据处理...
这个库在自动化测试、网页抓取以及其他需要与网页交互的场景中非常有用。通过HTMLUnit,开发者可以编写程序来模拟用户在浏览器上的操作,如点击链接、填写表单、执行JavaScript等,而无需真正打开一个浏览器实例。 ...
htmlunit java版无界面浏览器 实现网页自动登录利器 官方最新下载 htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源...
每个单元格可以用Cell类表示,我们可以根据其类型(数值、字符串等)提取数据。 ```java for (Row row : sheet) { for (Cell cell : row) { String cellValue = cell.getStringCellValue(); // 对于字符串类型 } ...
HTMLUnit是一个强大的Java库,它模拟了一个无头Web浏览器,主要用于自动化测试和网页抓取。... ...这对于创建自动化测试脚本或构建爬虫程序...通过理解和熟练使用这个库,开发者可以构建出精确、灵活的网页数据提取系统。
htmlunit是一款开源的java页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。...
6. **HTML源码解析**(HtmlUtil):HtmlUtil为解析和操作HTML文档提供了强大的工具,可以提取、修改网页元素,对于网页爬虫或自动化测试等场景尤其有用。 7. **图像处理**(ImageUtil):图像裁剪和缩放功能,使得...
它可以纠正HTML的语法错误,帮助爬虫正确解析复杂的网页结构,从而提取出所需的数据。 综合这些库,我们可以构建一个强大的网络爬虫,能够处理包含复杂JavaScript的网页,同时能够解析不规范的HTML,从而有效地抓取...
赠送jar包:htmlunit-2.33.jar; 赠送原API文档:htmlunit-2.33-javadoc.jar; 赠送源代码:htmlunit-2.33-sources.jar; 赠送Maven依赖信息文件:htmlunit-2.33.pom; 包含翻译后的API文档:htmlunit-2.33-javadoc-...
- `getterUtil`、`htmlUtil`、`httpUtil`、`imageToken`、`iteratorTool`、`listTool`、`localeUtil`、`mathTool`、`numberTool`、`paramUtil`、`portalUtil`、`portalprefsPropsUtil`、`propsUtil`、`...