【爬虫】Java 爬虫组件 Jsoup

【爬虫】Java 爬虫组件 Jsoup

  • 写在前面
  • 实现思路和步骤
    • 步骤一:引入 Jsoup
    • 步骤二:获取页面组件内容
    • 步骤三:分析页面构成获取需要的组件
  • 代码案例

写在前面

爬虫是通过编程的方式,从网站上获取数据的一种方式。很多语言都提供的有爬虫功能,都大同小异。这篇文章分享的是 Java 的爬虫组件 jsoup 的使用。以下案例以爬去小说为例

实现思路和步骤

步骤一:引入 Jsoup

  • 普通的 Java 项目需要手动下载 jsoup jar 包,导入到项目中。
  • Maven 项目可以导入 jsoup 坐标
     <dependency>
       <groupId>org.jsoupgroupId>
       <artifactId>jsoupartifactId>
       <version>1.13.1version>
     dependency>
    

步骤二:获取页面组件内容

// 借助 jsoup 工具获取网站的信息
// 获取链接对象
Connection connect = Jsoup.connect(site);
// 获取网站的文档对象
Document document = connect.get();

步骤三:分析页面构成获取需要的组件

  • 页面是通过 HTML 标签组成的,可以使用浏览器的开发者工具,找到需要获取的组件。
  • 分析组件的特征,看是否有 id、class 等相关的标识。
  • 根据标识获取组件对象,注意除 id 外,其他标识获取到的都是多个。
  • 有些数据在 HTML 的标签属性中,比如超链接、图片的请求地址在 href、src 属性中,所以还需要搭配attr()方法获取。
    【爬虫】Java 爬虫组件 Jsoup_第1张图片
    下图则是通过浏览器开发者工具分析的截图:
    1、章节的正文在
      中。
      2、章节的名称在 ul li 的超链接中。
      3、章节的连接在超链接的 href 属性中。
      【爬虫】Java 爬虫组件 Jsoup_第2张图片

    代码案例

    import org.jsoup.Connection;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Random;
    
    /**
     * 爬虫案例:爬取数据写入到磁盘。
     * 1、文本
     * 2、图片
     * 爬取小说:
     * 1、小说的网址。
     * 2、分析网站的构成,获取需要的信息。
     * 2.1 HTML的技术
     */
    public class JsoupDemo {
        public static void main(String[] args) throws IOException {
            // 网站地址
            String site = "https://www.69shuba.cc/book/64272/";
    
            // 借助 jsoup 工具获取网站的信息
            // 获取链接对象
            Connection connect = Jsoup.connect(site);
            // 获取网站的文档对象
            Document document = connect.get();
    
            // 从文档对象中获取需要的组件
            Elements chapterList = document.getElementsByClass("chapterlist");
            Element ul = chapterList.get(1);
    
            // 获取所有的 a 标签
            Elements as = ul.getElementsByTag("a");
    
            File file = new File("D://a.txt");
            if(!file.exists()){
                file.createNewFile();
            }
    
            FileOutputStream fos = new FileOutputStream(file, true);
    
            // 遍历所有的 a 元素
            for (Element a : as) {
                // 得到章节名称
                String chapterName = a.text() +  "\r\n";
    
                // 把章节写入到文件
                fos.write(chapterName.getBytes());
    
                // 获取的是超链接的 href 属性
                String href = a.attr("href");
                href = "https://www.69shuba.cc/book/64272/" + href;
    
                // 请求章节地址
                Connection chapterConnection = Jsoup.connect(href);
                Document chapterDocument = chapterConnection.get();
    
                // 获取需要的组件
                Element htmlContent = chapterDocument.getElementById("htmlContent");
                String content = htmlContent.text();
    
                // 把章节写入到文件
                fos.write(content.getBytes());
                fos.write("\r\n\r\n".getBytes());
    
                System.out.println("《" + a.text() + "》" + "下载完成!");
    
                try {
                    Random random = new Random();
                    Thread.sleep(random.nextInt(5000));
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            fos.close();
            System.out.println("小说下载完成!");
        }
    }
    

    你可能感兴趣的:(爬虫,java,开发语言)