本文共 3687 字,大约阅读时间需要 12 分钟。
package com.starry.service;import java.io.IOException;import java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.commons.dbutils.QueryRunner;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import com.starry.util.MyJDBCUtils;import com.starry.utity.Job;/** * 这是一个方法类 * jsoup的使用方法 * 以下代码实验于智联招聘 * @author Starry * */public class DateSearch { //主程序入口 public static void main(String[] args) throws SQLException { String url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl=郑州&kw=保洁&p=1&isadv=0"; acquireDate(url); } /** * 这是一个方法,需要传入一个字符串 * @param url * @throws SQLException */ public static void acquireDate(String url) throws SQLException{ QueryRunner qr=new QueryRunner(MyJDBCUtils.getDataSource()); Job job = new Job(); try { //根据一个url创建一个Document对象 //此时相当于鼠标点进去这个网页 Document doc = Jsoup.connect(url).get(); //获取网页里面class为zumc的那段代码 Elements element = doc.getElementsByClass("zwmc"); //获取网页上面那段代码中的的包含href属性的a标签,得到一个集合 Elements element2 = element.select("a[href]"); //遍历集合 for (Element ele : element2) { //获取 上面那段代码中的 href="www.XXXXXXXXXXX.com" 获取的是引号中的网址 String href = ele.attr("href"); //然后根据获得的网址在创建一个对象 ,相当于又点进去了一个网页 Document docc = Jsoup.connect(href).get(); //下面的是我新建的一个job类,我把我从网页上弄出来的东西封装到这个类里面,然后在输出到mysql //我使用的方法很简单,例如下面:div.inner-left>h1 意思就是说有个标签叫div,这个div //的class是inner-left,">"这个符号的意思是这个标签里面有个h1的标签,".text"这个意思是把这个h1标签里面的文字转换出来变成String字符串 job.setJobName(docc.select("div.inner-left>h1").text());// 工作名称 job.setCompanyName(docc.select("div.inner-left>h2").text());// 公司名称 //这个就是有个class是terminal-ul的ul标签,他里面有个li,li里面有个strong标签 //然后把Strong里面的文字给我变成一个String字符串 "first"意思是 第一个strong标签里面的内容 job.setPay(docc.select("ul.terminal-ul>li>strong").first().text());// 工资范围 job.setJobDesc(docc.select("div.tab-inner-cont>p").first().text());// 职位描述 job.setCompanyDesc(docc.select("div.tab-inner-cont[style]>p").text());// 公司描述 //这是一个获取日期的方法 String str = docc.select("ul.terminal-ul>li").get(2).select("strong").text(); job.setPublicDate(dateMethod(str));// 发布日期 job.setCreateDate(dateMethod2(0));// 创建时间 //这个标签就有点意思了,select了两次 //第一次先查找第5个li,然后获取第5个li里卖弄的strong标签中的内容 //"get"的意思是我要获取第5个li里面的内容 {从0开始,第一个是0} job.setPersonNumber(docc.select("ul.terminal-ul>li").get(6).select("strong").text()); job.setJobAdress(docc.select("ul.terminal-ul>li").get(1).select("strong").text()); job.setSourceURL(href); //mysql插入数据的语句 String sql="insert into worktable value(?,?,?,?,?,?,?,?,?,?,?)"; Object[] params={null,job.getJobName(),job.getCompanyName(), job.getPay(),job.getJobDesc(),job.getCompanyDesc(),job.getJobAdress(),job.getPersonNumber(), job.getPublicDate(),job.getCreateDate(),job.getSourceURL()}; qr.update(sql, params); } } catch (IOException e) { e.printStackTrace(); } /* * 创建时间 和当前时间 */ } /** * 信息发布日期 * @param a * @return */ public static String dateMethod(String str){ String regEx="\\d{4}-\\d{2}-\\d{2}"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); String aa = null; if(m.matches()){ aa=str; }else{ if(str.equals("前天")){ aa=dateMethod2(2); }else if(str.equals("昨天")){ aa=dateMethod2(1); }else if(str.equals("15天前")){ aa="15天前"; }else{ aa=dateMethod2(0); } } return aa; } public static String dateMethod2(int a) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -a); String yesterday = new SimpleDateFormat("yyyy-MM-dd ").format(cal.getTime()); return yesterday; }}
转载地址:http://gsxvi.baihongyu.com/