经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java可以像Python一样方便爬去世间万物
来源:cnblogs  作者:wenbochang  时间:2018/11/5 11:13:45  对本文有异议

前言:

  • 之前在大二的时候,接触到了Python语言,主要是接触Python爬虫那一块

  • 比如我们常用的requests,re,beautifulsoup库等等

  • 当时为了清理数据和效率,还专门学了正则表达式,异常的佩服自己哈哈哈哈哈

  • 最近闲着无事干,秉承是Java是世界上最好的语言,Python能干,为啥Java不行

  • 说刚就刚,以下以两个小例子还说明Java做爬虫一样可以像Python哪样方便

 

技术:

  • SpringBoot

  • HttpClient

  • Jsoup

  • HttpClientUtil

 

贴吧一键签到:

  • 我们要知道,不管是你访问一个页面,还是登录注册

  • 本质就是发送Http请求

  • Http请求大致有四种

    • Get

    • Post

    • Delete

    • Put

  • 我们常用的也就是两种Get请求获取页面资源

  • Post请求发送数据

  • 所以我们的思路如下:

    • 向某个URL发送GET请求,获取HTML页面

    • 用正则或者第三方工具清理数据

    • 获得数据以后在进行后续操作

    • 比如在GET请求

    • 或者直接存到数据库中怎么样的

 

  1. 获取HTML页面:

  1.  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.  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.  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.  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做爬虫,无非两点

  • 获取HTML

  • 清理页面

  当我们这两点都会的时候,那么就十分的简单了。当然这里也用到了第三方的开源jar包

  • 获取HTML   =>  HttpClient

  • 清理数据      =>  Jsoup

  

 

ps.  如果你对爬虫也感兴趣,我之前写过一个爬知乎图片的爬虫  前方高能

 

  

   女生们被关注腿是什么感受?

   做一个可爱的女孩子是一种什么体验?

   怎样搭配才能显得腿长?

   平常人可以漂亮到什么程度?

 

  可以自己爬下来,慢慢欣赏,不用谢我 

 

 

 

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号