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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。