zoukankan      html  css  js  c++  java
  • Java可以像Python一样方便爬去世间万物

    前言:

    • 之前在大二的时候,接触到了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 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("
    ", "");
    17                 res.add(s);
    18             }
    19         }
    20     }

      项目源码:天涯社区帖子

    总结:

      用Java做爬虫,无非两点

    • 获取HTML
    • 清理页面

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

    • 获取HTML   =>  HttpClient
    • 清理数据      =>  Jsoup

      

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

      

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

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

       怎样搭配才能显得腿长?

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

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

  • 相关阅读:
    [Voice communications] 声音的滤波
    [Voice communications] 声道的转换
    [Voice communications] 音量的控制
    [Voice communications] 看得到的音频流
    [Voice communications] 让音乐响起来
    HDFS之FileStatus
    HDFS中JAVA API的使用
    hadoop集群环境的搭建
    【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之三
    【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之三
  • 原文地址:https://www.cnblogs.com/wenbochang/p/9904884.html
Copyright © 2011-2022 走看看