Java使用Jsoup写爬虫

本文详细介绍了如何使用Java的Jsoup库进行网页抓取,包括安装Jsoup.jar、基本用法、常用方法以及实战示例。通过Jsoup,可以方便地解析和操作HTML,实现对特定内容的筛选。文章还展示了如何根据用户输入爬取不同页面信息,涉及校园概况、新闻中心等多个板块,适合初学者进阶学习。
摘要由CSDN通过智能技术生成

安装Jsoup.jar

1.首先我们打开Jsoup官网
2.按照图片这里下载在这里插入图片描述
3.打开IDEA去新建一个空白项目
在这里插入图片描述
4.安装.jar包最重要的是把jar放到项目里面使用,所以我们要在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简单了解Jsoup

  1. jsoup提供了一套非常省力的API,可以通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据
  2. 从一个URL,文件或者字符串中解析HTML
  3. 使用DOM或CSS选择器来查找,取出数据
  4. 可以操作HTML元素,属性和文本
  5. 是基于MIT协议发布的,可放心适用于商业项目!

Jsoup框架中的常用方法

1. connet (String url): 创建一个新的Connection连接对象
2. get(): 取得要解析的一个HTML文件,如果从该URL获取HTML时发生错误,则会抛出IOException异常.
3.  parse(String html,String vaseUri): 将输入的HTML解析为一个新的文档(Document),参数baseUri用来相对一个URL转成绝对URL.并指定从哪个网站获取文档.只要解析的不是空字符串,就能返回一个结构合理的文档,其中包含(至少)一个head和一个body的元素
4. parseBodyFragment(): 创建一个空壳的文档,并插入解析过得HTML到Body元素中,如果使用正常的Jsoup.parse(String html)方法,通常也可以得到相同的结果.
5. Document.body(): 能够取得文档body元素的所有子元素,具体功能与doc.getElementsByTag("body")相同
6. Node.atter(String key): 获取一个属性的值
7. Element.text(): 获取一个元素中的文本
8. Element.html()Node.outerHtml(): 获取元素或属性中的HTML内容

动手实践

经过我们简单初步的了解了一下Jsoup.jar的使用我们可以发现Jsoup相比对元素筛选是非常简单的!直接了当,简简单单so~ easy~
在这里插入图片描述
大概初步就是这个样子的
在这里插入图片描述
接着我们需要连接上这个网址
在这里插入图片描述
在这里插入图片描述
这下子就算是连接上了,我们可以输出看看

System.out.printl(element.html());
//添加到后面可以输出测试一下是否连接成功

在这里插入图片描述
我们发现可以输出html文档,这就成功了,接下来我们开始找我们需要的内容在这里插入图片描述
在这里插入图片描述
我们找到我们需要内容的标签了在这里插入图片描述
在这里插入图片描述
这样子一个简单的爬虫就写好了

import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.net.URL;

public class test {
    public static void main(String[] args) throws IOException {
        //因为要抛异常我们要在这里使用throws IOException方法
        String URL = "https://pds14.com/xxjj";
        //这里以我初中学校的网站做示范
        Element element = Jsoup.parse(new URL(URL), 3000);
        //延迟三秒开始爬虫
        Elements div = element.getElementsByClass("editableContent");
        String span = div.text();
        System.out.println(span);
    }
}

进阶写法

都说了进阶写法肯定要装个13啊,为了学习爬虫自己可以找一些练手的网站,例如我初中的这个网站,就是一个很好的练手道具,当然下面的进阶写法也是围绕着这个网站写的,大家可以看着 试着理解一下

import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.net.URL;
import java.util.Scanner;


public class pds14 {
    //主代码
    public static void Version() throws IOException {
        //检测最新版本
        String URL = "http://www.sharking.cc/Version.html";
        Element element = Jsoup.parse(new URL(URL), 3000);
        String Version = element.getElementsByTag("p").text();
        if (Version.equals("0.1")){
            System.out.println("版本:" + Version);
        }else{
            System.out.println("版本已过时,请更新最新版本!");
            Scanner in = new Scanner(System.in);//生成一个输入流对象
            System.exit(0);
        }
    }

    //爬虫
    public static void xygk_xxjj() throws IOException{
        //校园概况-学校简介
        String URL = "https://pds14.com/xxjj";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements div = element.getElementsByClass("editableContent");
        for (Element span : div){
            String xxjj = span.getElementsByTag("span").text();
            System.out.println(xxjj);
        }
    }

    public static void xygk_ldbz() throws IOException{
        //校园概括-领导班子
        String URL = "https://pds14.com/ldbz";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByClass("w-list-title").text();
            String info = a.getElementsByClass("w-list-info").text();
            String img = a.getElementsByTag("img").attr("src");

            System.out.println("*******************主题*******************");
            System.out.println(title);
            System.out.println("图片地址:" + img);
            System.out.println("-----------------文章内容-----------------");
            System.out.println(info);
            System.out.println("******************************************\n\n");
        }
    }

    public static void xygk_xyly() throws IOException{
        //校园概括-校园掠影
        String URL = "https://pds14.com/xyly";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements div = element.getElementsByClass("smAreaC");
        for (Element img : div){
            String pic = img.getElementsByTag("img").attr("src");
            System.out.println("图片地址:" + pic);
        }
    }

    public static void xwzx_xyxw() throws IOException{
        //新闻中心-校园新闻
        String URL = "https://pds14.com/xyxw";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String url = a.getElementsByTag("a").attr("href");
            System.out.println("-------------------最新新闻--------------------");
            System.out.println("文章:" + title);
            System.out.println("地址:https://pds14.com" + url);
            System.out.println("-----------------------------------------------\n");
        }

    }

    public static void xwzx_tzgg() throws IOException{
        //新闻中心-通知公告
        String URL = "https://pds14.com/tzgg";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-link");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");
            System.out.println("---------------最新通知公告---------------");
            System.out.println("文章:" + title);
            System.out.println("地址:https://pds14.com" + href +"\n");
        }
    }

    public static void djyd_jgzz() throws IOException{
        //党建园地-组织机构
        String URL = "https://pds14.com/zzjg";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");

            System.out.println("----------------最新文章----------------");
            System.out.println("标题:" + title);
            System.out.println("地址:https://pds14.com" + href + "\n");
        }
    }

    public static  void djyd_djdt() throws IOException{
        //党建园地-党建动态
        String URL = "https://pds14.com/djdt";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");

            System.out.println("----------------最新文章----------------");
            System.out.println("标题:" + title);
            System.out.println("地址:https://pds14.com" + href + "\n");
        }
    }

    public static void jxjy_jxdt() throws IOException {
        //教学教研-教学动态
        String URL = "https://pds14.com/jxdt";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");

            System.out.println("----------------最新文章----------------");
            System.out.println("标题:" + title);
            System.out.println("地址:https://pds14.com" + href + "\n");
        }
    }

    public static void jxjy_jxyj() throws IOException{
        //教学教研-教学研究
        String URL = "https://pds14.com/jxyj";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");

            System.out.println("----------------最新文章----------------");
            System.out.println("标题:" + title);
            System.out.println("地址:https://pds14.com" + href + "\n");
        }
    }

    public static void dytd_dyhd() throws IOException{
        //德育天地-德育活动
        String URL = "https://pds14.com/dyhd";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");

            System.out.println("----------------最新文章----------------");
            System.out.println("标题:" + title);
            System.out.println("地址:https://pds14.com" + href + "\n");
        }
    }

    public static void dytd_xlzx() throws IOException{
        //德育天地-心理咨询
        String URL = "https://pds14.com/xlzx";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");

            System.out.println("----------------最新文章----------------");
            System.out.println("标题:" + title);
            System.out.println("地址:https://pds14.com" + href + "\n");
        }
    }

    public static void dytd_gzzd() throws IOException{
        //德育天地-规章制度
        String URL = "https://pds14.com/gzzd";
        Element element = Jsoup.parse(new URL(URL), 3000);
        Elements li = element.getElementsByClass("w-list-item");
        for (Element a : li){
            String title = a.getElementsByTag("a").text();
            String href = a.getElementsByTag("a").attr("href");

            System.out.println("----------------最新文章----------------");
            System.out.println("标题:" + title);
            System.out.println("地址:https://pds14.com" + href + "\n");
        }
    }

    public static void jsfc_jsdw() throws IOException{
        //教师风采-教师队伍
        String URL = "https://pds14.com/jsdw";
        Element element = Jsoup.parse(new URL(URL), 3000);
        //Element div = element.getElementById("smv_con_12_37");
        Elements li = element.getElementsByClass("w-list-item");
        for (Element el : li){
            String title = el.getElementsByClass("w-list-link").text();
            String a = el.getElementsByTag("a").attr("href");
            //打印
            System.out.println("---------------------------------------------------");
            System.out.println(title);
            System.out.println("https://pds14.com" + a);
        }
    }
    public static void main(String[] args) throws IOException{
        while (true){
            Version();//检测是否为最新版本
            System.out.println("******************************");
            System.out.println("|输入\"1\"回车 爬'校园概况'信息|");
            System.out.println("|输入\"2\"回车 爬'新闻中心'信息|");
            System.out.println("|输入\"3\"回车 爬'党建园地'信息|");
            System.out.println("|输入\"4\"回车 爬'教学教研'信息|");
            System.out.println("|输入\"5\"回车 爬'德育天地'信息|");
            System.out.println("|输入\"6\"回车 爬'教师风采'信息|");
            System.out.println("|输入\"7\"回车 爬'招生专栏'信息|");
            System.out.println("    |输入\"8\"回车 退出程序|   ");
            System.out.println("*****************************");
            Scanner inputNum = new Scanner(System.in);
            int Option = inputNum.nextInt();//记录选项变量
            String Option8 = inputNum.nextLine();//记录输入值

            //若是输入8就退出程序
            if (Option8.equals("8")){
                System.exit(0);
            }

            switch (Option) {
                case 1:
                    System.out.println("输入1 查看'学校简介'");
                    System.out.println("输入2 查看'领导班子'");
                    System.out.println("输入3 查看'学校荣誉'");
                    System.out.println("输入4 查看'机构设置'");
                    System.out.println("输入5 查看'校园掠影'");
                    Scanner inuptNum1 = new Scanner(System.in);
                    int Option1 = inuptNum1.nextInt();//记录选项变量
                    switch (Option1){
                        case 1:
                            xygk_xxjj();//校园概况-学校简介
                            break;
                        case 2:
                            xygk_ldbz();//校园概括-领导班子
                            break;
                        case 3:
                            System.out.println("'学校荣誉'页面未建设好!");
                            break;
                        case 4:
                            System.out.println("'机构设置'页面未建设好!");
                            break;
                        case 5:
                            xygk_xyly();//校园概括-校园掠影
                            break;
                    }
                    break;
                case 2:
                    System.out.println("输入1 查看'校园新闻'");
                    System.out.println("输入2 查看'通知公告'");
                    Scanner inputNum2 = new Scanner(System.in);
                    int Option2 = inputNum2.nextInt();//记录选项变量
                    switch (Option2){
                        case 1:
                            xwzx_xyxw();//新闻中心-校园新闻
                            break;
                        case 2:
                            xwzx_tzgg();//新闻中心-通知公告
                            break;
                    }
                    break;
                case 3:
                    System.out.println("输入1 查看'组织机构'");
                    System.out.println("输入2 查看'党建动态'");
                    Scanner inputNum3 = new Scanner(System.in);
                    int Option3 = inputNum3.nextInt();//记录选项变量
                    switch (Option3){
                        case 1:
                            djyd_jgzz();//党建园地-组织机构
                            break;
                        case 2:
                            djyd_djdt();//党建园地-党建动态
                            break;
                    }
                    break;
                case 4:
                    System.out.println("输入1 查看'教学动态'");
                    System.out.println("输入2 查看'教学研究'");
                    Scanner inputNum4 = new Scanner(System.in);
                    int Option4 = inputNum4.nextInt();//记录选项变量
                    switch (Option4){
                        case 1:
                            jxjy_jxdt();//教学教研-教学动态
                            break;
                        case 2:
                            jxjy_jxyj();//教学教研-教学研究
                            break;
                    }
                    break;
                case 5:
                    System.out.println("输入1 查看'教育活动'");
                    System.out.println("输入2 查看'心里咨询'");
                    System.out.println("输入3 查看'规章制度'");
                    Scanner inputNum5 = new Scanner(System.in);
                    int Option5 = inputNum5.nextInt();//记录选项变量
                    switch (Option5){
                        case 1:
                            dytd_dyhd();//德育天地-德育活动
                            break;
                        case 2:
                            dytd_xlzx();//德育天地-心里咨询
                            break;
                        case 3:
                            dytd_gzzd();//德育天地-规章制度
                            break;
                    }
                case 6:
                    System.out.println("输入1 查看'教师队伍'");
                    System.out.println("输入2 查看'名师简介'");
                    Scanner inputNum6 = new Scanner(System.in);
                    int Option6 = inputNum6.nextInt();//记录选项变量
                    switch (Option6){
                        case 1:
                            jsfc_jsdw();//教学教研-教学动态
                            break;
                        case 2:
                            System.out.println("'名师简介'页面未建设好!");//教学教研-教学研究
                            break;
                    }
                case 7:
                    System.out.println("'招生专栏'页面未建设好!");
                    break;
                case 8:
                    System.exit(0);
            }
        }

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Koyeta

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值