jsoup爬蟲專案基礎用法,如何用jsoup從網上爬東西
阿新 • • 發佈:2018-12-31
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; } }