前言:
之前在大二的时候,接触到了Python语言,主要是接触Python爬虫那一块
比如我们常用的requests,re,beautifulsoup库等等
当时为了清理数据和效率,还专门学了正则表达式,异常的佩服自己哈哈哈哈哈
最近闲着无事干,秉承是Java是世界上最好的语言,Python能干,为啥Java不行
说刚就刚,以下以两个小例子还说明Java做爬虫一样可以像Python哪样方便
技术:
SpringBoot
HttpClient
Jsoup
HttpClientUtil
等
贴吧一键签到:
我们要知道,不管是你访问一个页面,还是登录注册
本质就是发送Http请求
Http请求大致有四种
我们常用的也就是两种Get请求获取页面资源
Post请求发送数据
所以我们的思路如下:
向某个URL发送GET请求,获取HTML页面
用正则或者第三方工具清理数据
获得数据以后在进行后续操作
比如在GET请求
或者直接存到数据库中怎么样的
1. 获取HTML页面:
- 1 public void execute(String username) { 2 // 获取cookie 3 String cookie = getCookie(username); 4 // 获取首页html内容 5 String content = http.get("http://tieba.baidu.com/mo/", cookie); 6 // 获取所有连接 7 String links = getMore(content); 8 links = "http://tieba.baidu.com" + links; 9 // 获取所有贴吧html内容10 content = http.get(links, cookie);11 List<String> likesLink = getLike(content);12 sign(likesLink, cookie, username);13 }
我们用第三方工具包 HttpClientUtil 可以直接发送Get请求(已经封装好的)
2.清理数据:
- 1 private void sign(List<String> likesLink, String cookie, String username) { 2 for (String link : likesLink) { 3 String content = http.get(link, cookie); 4 Document doc = Jsoup.parse(content); 5 Elements titles = doc.getElementsByClass("bc"); 6 String title = titles.get(0).text(); 7 title = title.split("吧")[0]; 8 Elements links = doc.select("a[href]"); 9 boolean flag = true;10 for (Element ele : links) {11 String ss = ele.attr("href");12 ss = "http://tieba.baidu.com" + ss;13 if (ss.contains("sign")) {14 http.get(ss, cookie);15 // 插入到数据库中16 String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());17 dao.insertRecord(username, title, date, "签到成功");18 flag = false;19 break;20 }21 }22 if (flag) {23 // 插入到数据库中24 String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());25 dao.insertRecord(username, title, date, "已签到");26 }27 }28 }
我们这里用的第三方工具 Jsoup, Jsoup可以像DOM一样简单的获取任何东西。甚至你可以用这个则来进行获取。
项目源码:贴吧一键签到
项目地址:贴吧一键签到
爬取天涯房价的帖子:
1. 获取HTML地址:
- 1 public List<String> getContent() { 2 3 List<String> res = new ArrayList<>(); 4 // 92是固定的,帖子的总数 5 for (int i = 1; i <= 92; i++) { 6 String url = getUrl(i); 7 String content = http.get(url); 8 getParse(content, res); 9 }10 return res;11 }
2.清理数据:
- 1 private void getParse(String content, List<String> res) { 2 3 Document doc = Jsoup.parse(content); 4 Elements links = doc.getElementsByClass("bd"); 5 for (Element link : links) { 6 String str = link.toString(); 7 Pattern pattern = Pattern.compile("<p>[.\\s\\S]+?div"); 8 Matcher m = pattern.matcher(str); 9 while (m.find()) {10 String s = m.group();11 s = s.replaceAll("<", "");12 s = s.replaceAll(">", "");13 s = s.replaceAll("/", "");14 s = s.replaceAll("p", "");15 s = s.replaceAll("div", "");16 s = s.replaceAll("\n", "");17 res.add(s);18 }19 }20 }
项目源码:天涯社区帖子
总结:
用Java做爬虫,无非两点
当我们这两点都会的时候,那么就十分的简单了。当然这里也用到了第三方的开源jar包
获取HTML => HttpClient
清理数据 => Jsoup
ps. 如果你对爬虫也感兴趣,我之前写过一个爬知乎图片的爬虫 前方高能
女生们被关注腿是什么感受?
做一个可爱的女孩子是一种什么体验?
怎样搭配才能显得腿长?
平常人可以漂亮到什么程度?
可以自己爬下来,慢慢欣赏,不用谢我

