您好,登錄后才能下訂單哦!
java中怎么利用jsoup爬取數據并解析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
1.首先分析下要爬的數據 :
a.獲取到請求考勤的接口 ,網站開發工具就能抓到比較順利(這里我登錄沒有搞定,迂回了一下。后面會記錄實現方式)
b.分析數據格式,簡單的html-table表格 nice!
二 、 獲取考勤數據并整理輸出到excel
這里爬數據我用了jsoup ,處理數據用了dom4j
maven引入
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.12.1</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
代碼如下:
/** * 模擬請求獲取數據 * * @param userId 用戶id * @param date 日期 */ @Override public List<KaoQinData> getPunchList(Integer userId, String date) throws Exception { UserBean user = userMapper.getUser(userId); //拼裝請求地址、參數和必要的請求頭信息 StringBuilder url = new StringBuilder(); url.append("http://xxxxxx.com/newkaoqin?userid="); url.append(userId); url.append("&seldate="); url.append(date); Connection con2 = Jsoup.connect(url.toString()); con2.header("User-Agent", USER_AGENT); con2.header("Host", HOST); con2.header("Referer", REFERER); con2.header("Cookie", getCookie()); Response response = con2.ignoreContentType(true).method(Method.GET).execute(); //處理返回的數據 String body = response.body(); Document doc = Jsoup.parse(body); //定位到要解析的位置 選擇器可以任意選擇。 Elements tab2 = doc.getElementsByClass("tab2"); //因為后面有很多無用數據,我們只用第一個所以獲取第一個數據 Element first = tab2.first(); // first可能為空 Elements tr = first.select("tr"); //處理數據 KaoQinData 是考勤數據的實體。統計后返回實體的集合 List<KaoQinData> kaoQinData = new ArrayList<>(); KaoQinData kaoQin; for (Iterator<org.jsoup.nodes.Element> cit = tr.iterator(); cit.hasNext(); ) { Element tr1 = cit.next(); Elements td = tr1.select("td"); if (td.size() > 0) { Element punchDateEle = td.get(0); String punchDateStr = punchDateEle.text(); Element punchTimeEle = td.get(4); String punchTimeStr = punchTimeEle.text(); if (!StringUtils.isEmpty(punchTimeStr)) { String substring = punchTimeStr.substring(0, punchTimeStr.indexOf(":")); Integer integer = Integer.valueOf(substring); if (integer >= 20) { System.out.println(punchDateStr + "," + punchTimeStr); kaoQin = new KaoQinData(user.getRealName(), punchDateStr, punchTimeStr); kaoQinData.add(kaoQin); } } } } return kaoQinData; }
這里基本上就差不多了。輸出excel什么的。隨便啦 喜歡用什么就用什么;
附:順便說一下,我因為沒有搞定自動登錄獲取cookie,偷巧迂回了一下,
1.在項目中創建了一個文件專門存放cookie,像這樣:
2.因此寫了一個接口用來更新cookie的接口,把新的cookie寫上去覆蓋cookie文件。
3.使用的時候獲取cookiefile文件內的cookie。(有點麻煩,后面有空再研究下自動登錄)
/** * 獲取coockie. * @return * @throws IOException */ private String getCookie() throws IOException { int num; char[] buf = new char[1024]; File file = new File(COOKIE_FILEPATH); if (!file.exists()) { file.createNewFile(); } FileReader fileReader = new FileReader(file.getPath()); StringBuilder stringBuilder = new StringBuilder(); while ((num = fileReader.read(buf)) != -1) { stringBuilder.append(buf, 0, num); } return stringBuilder.toString(); }
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。