zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java爬虫项目实战案例四之Jsoup使用

JAVA案例爬虫项目 实战 Jsoup 使用
2023-09-14 09:13:18 时间

Java爬虫项目实战案例四之 Jsoup 使用

1. Jsoup简介

Jsoup是一款java的HTML解析器,可直接解析某个URL地址,HTML文本内容。它提供了一套非常简便的API,可通过DOM,CSS以及类似jQuery的操作方法来取出数据和操作数据。
在爬取到网页之后,就需要使用Jsoup进行网页的解析。

2. 代码

public static void test3() throws IOException{
        CloseableHttpClient httpClient = HttpClients.createDefault();//创建httpClient实例
        HttpGet httpGet = new HttpGet("https://www.cnblogs.com/"); //创建httpGet实例

        HttpHost proxy = new HttpHost("114.235.22.147", 9000);
        RequestConfig config = RequestConfig
                .custom()
                .setProxy(proxy)
                .setConnectTimeout(10000)//连接超时
                .setSocketTimeout(10000)//读取超时
                .build();
        httpGet.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0");

        CloseableHttpResponse response = httpClient.execute(httpGet);//指向http get请求

        HttpEntity entity = response.getEntity();//获取返回实体

        //System.out.println("网页内容:"+ EntityUtils.toString(entity,"utf-8"));//获取网页内容
        System.out.println("Content-Type :"+entity.getContentType());//获取内容类型
        System.out.println("Status : "+response.getStatusLine());//判断响应状态

        String content = EntityUtils.toString(entity);

        //way 1:
        Document docment = Jsoup.parse(content);
        Elements elements = docment.getElementsByTag("title");
        Element speciEle = elements.get(0);
        String title = speciEle.text();
        System.out.println("网页标题是:"+title);


        //way 2
        Element site_nav_top = docment.getElementById("site_nav_top");
        String slogan = site_nav_top.text();
        System.out.println("slogan :" + slogan);

        response.close();
        httpClient.close();
    }

3.执行结果

在这里插入图片描述

4.代码详解

  • 获取信息方式1
        //way 1:
        Document docment = Jsoup.parse(content);
        Elements elements = docment.getElementsByTag("title");
        Element speciEle = elements.get(0);
        String title = speciEle.text();
        System.out.println("网页标题是:"+title);
  • content是上文的entity得到

  • 通过Jsoup解析content,得到一个Document对象

  • 每个Document对象中包涵很多元素,但是我们只需要Tag = 'title’的集合,注意这里是集合。所以如果需要某个具体的值,就需要指定集合中元素的下标,这里取下标为0 的Element。【这时取到的就是Element,而是不Elements】

  • 然后通过取出来的Element对象获取其中的文本。最后输出

  • 获取信息方式2

        //way 2
        Element site_nav_top = docment.getElementById("site_nav_top");
        String slogan = site_nav_top.text();
        System.out.println("slogan :" + slogan);
  • 获取content,获取document同方式1
  • 通过document对象,找到其中id ='site_nav_top’的内容,注意,因为在一个html页面中,id具有唯一性,所以这里找到的值就是唯一值。
  • 输出即可