• 【java爬虫】---爬虫+jsoup轻松爬博客


    爬虫+jsoup轻松爬博客

          最近的开发任务主要是爬虫爬新闻信息,这里主要用到技术就是jsoup,jsoup 是一款 Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过

    DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。这篇文章就讲通过jsoup爬虫的实际案例,下一篇再讲jsoup的具体文档。

    主要爬虫对象就以我之前写的一篇博客:【java提高】---java反射机制   

    主要爬区的信息有

        (1)该文章的标题

        (2)该文章的二类标题

        (3)发表时间

        (4)阅读数量

    一、案例演示

    1、代码部分

    package com.jincou.pachong;
    
    import java.io.IOException;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
     /*
      * 这个案例你只需要看结果,具体的jsoup介绍下一篇博客会详细介绍
      */
    public class Pachong {
         public static void main(String args[]){     
        
             //这个就是博客中的java反射的url     
         final String url=  "https://www.cnblogs.com/qdhxhz/p/9230805.html";
             
            try {
            //先获得的是整个页面的html标签页面
             Document doc = Jsoup.connect(url).get();
            
             //获取正文标题,因为整片文章只有标题是用h1标签
             Elements btEl = doc.select("H1");
             String  bt=btEl.text();
             System.out.println("========正文标题======:"); 
             System.out.println(bt); 
                    
           //获取二级标题
             Elements ejbtEls = doc.select("H2");
           //因为整片文章有多个二级标题所以进行拼接
             StringBuilder  ejbts=new  StringBuilder();
             for(Element el :ejbtEls) {
                 ejbts.append(el.text());
                 ejbts.append("
    ");
             }
            String ejbt=ejbts.toString();
            System.out.println("=======二级标题=========:"); 
            System.out.println(ejbt); 
                       
           //获取时间
           Elements timeEl = doc.select("#post-date");
           String  time=timeEl.text();
           System.out.println("========发布时间=========:"); 
           System.out.println("发布时间:" + time); 
          
           //获取阅读数量
           Elements readEl = doc.select("#post_view_count");
           String  read=readEl.text();
           System.out.println("========阅读数量=========:"); 
          System.out.println("阅读数量:" + read); 
           
            } catch (IOException e) {
                e.printStackTrace();
            }
     }
    }

    2、运行结果

    注意:我们发现该篇文章的信息都已经爬到了,但是为什么阅读数量是...

    二、案例讲解

           首先我们要知道:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操

    作数据。上面这两点很关键,具体细说。

    1、如何爬到正文标签

         我们看到正文标题的html标签是h1标签,所以我们只要获得H1标签元素,就可以爬到文本。那么同样的二级标签也是通过H2标签爬到就可以。

    2、如何获得发布时间

        因为时间的标签id是post-date,所以可以通过id获得该标签元素。

    3、为什么阅读数量是...

      我们看到页面阅读是有的,但爬虫爬到确实...?

          这是为什么呢,这点很重要。那是因为该静态页面初始加载的时候是没有阅读数量的,阅读数量是后来接口重新调取的。什么意思呢?其实很好理解所以你写一篇文章的时候像标题,内容,时间

    等等是不太会变动的,但是你的阅读数量每访问一次都会改变,所以不可能把阅读数量和文章放在一张表里,而是分开放然后id关联就可以。这样就避免每次update文章表。所以静态页面初始是没有

    阅读数量的。

    那如何验证是不是这样。请看。

         我们发现初始的html页面的阅读量和评论都是没有的,而是默认...,所以上面爬到的就是...

         那如何能爬到真实的阅读量呢,这个就需要知道它真实的接口是什么,然后通过其它工具来爬,我们看下获取阅读量的真实接口。

    既然知道阅读量的真实接口,那么爬到它也就简单了。

    注意:通过这里我们要明白,只有html元素有的情况下,才能通过jsoup来爬虫,如果是这接口获得的数据,那么通过jsoup是无法获取到的。

    有关jsoup也是自己的理解,如有不正确请留言指点。

      

    想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。中校【9】

  • 相关阅读:
    当使用vue的按键修饰符不起效果的时候怎么办?如@keyup.enter = '' ;
    Android 破解
    粒子跟随3
    关于国际化
    一些js及css样式
    Could not find method google() for arguments [] on repository container.
    redis
    window cmd 自动补全
    gradle中的 settings.gradle
    for(String s:list)的运行
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/9338834.html
Copyright © 2020-2023  润新知