利用Jsoup与Mybatis-Plus获得数据并写入数据库

Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。下面我将带大家走进项目实战!

1.创建SpringBoot项目

打开IDEA,创建一个新的SpringBoot项目,输入对应的名称,位置,Java环境以及SDK,点击下一步即可完成创建。
在这里插入图片描述
点击下一步后,还需要引入Spring Web的依赖,选择完毕后,点击完成即可。
在这里插入图片描述

2.导入项目依赖

在pom.xml中导入本次项目所需要的依赖。

<!--        数据库驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <!--        mybatis-plus 是自己开发的 并非官方的-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.0.5</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
     <!--解析网页jsoup-->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

3.查看京东商城的属性标签

右击右侧链接,即可进入京东官网,以搜索Java为例京东,进入京东官网后,点击F12,查看页面的布局情况可知,商品列表都在一个id为J_goodsList的div中,而具体的每一个商品信息列表都在一个li标签里面,每一个li标签(商品信息)都包括商品价格(p-price),商品名称(p-name)以及商品图片(p-img)等信息。具体如下图所示。
在这里插入图片描述

4.创建数据库表结构

根据分析了京东商品的属性结构后,下面就需要创建数据库表结构。具体操作如下所示:
打开SQLyog,创建Item数据库并在该数据库中创建book数据库表。具体的创建数据库以及创建表的sq语句如下所示:
由于商品查询出来的信息较长,所以使用VARCHAR(200),保证数据库表大小能够存储对应的字段。

CREATE DATABASE Item;
CREATE TABLE book(
	id INT PRIMARY KEY COMMENT '主键ID',
	img VARCHAR(200) COMMENT '书籍地址',
	NAME VARCHAR(200) COMMENT '书籍名称',
	price VARCHAR(200) COMMENT '书籍价格'
);

5.连接数据库

在SpringBoot项目中的application.properties中配置连接数据库的信息,具体如下所示:

spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/item?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

注意:如果是Mysql8.0则需要引入对应的时区设置。

6.创建商品实体类

连接好数据库后,就需要创建商品实体类。
在创建好的SpringBoot项目下创建pojo软件包(存放实体类),在该软件包中创建book实体类,用于存储商品数据。具体代码如下所示

package com.xing.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    private int id;//主键
    private String img;//商品图片
    private String name;//商品名称
    private String price;//商品价格
}

7.创建mapper接口

因为是采用Mybatis-Plus,所以我们只需要定义一个BookMapper接口继承BaseMapper即可 ,这样一来就将所有简单的CRUD(增删改查)都已经编写完成,不在需要编写大量的配置文件了。

package com.xing.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xing.pojo.Book;
import org.springframework.stereotype.Repository;

@Repository
public interface BookMapper extends BaseMapper<Book> {
    //定义一个mapper接口 继承BaseMapper<Book>即可
    //如此就将所有的CRUD语句写完了
}

注意:编写完mapper层以后,我们还需要在主程序入口扫描mapper包下的所有接口
在这里插入图片描述

8.编写测试类代码

本次插入的所有数据是有关Java的商品,读者可以执行修改
String url=“https://search.jd.com/Search?keyword=java”;里面的keyword后面的值来实现其他类型信息的查询,当然也可以将下面的代码封装成方法来实现动态的查询。

package com.xing;

import com.xing.mapper.BookMapper;
import com.xing.pojo.Book;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
class JsoupHtmlParseApplicationTests {
    @Autowired
    BookMapper bookMapper;
    @Test
    void contextLoads() throws IOException {
        //定义需要解析的网页地址
        String url="https://search.jd.com/Search?keyword=java";
        //这里的document就是浏览器里面的document
        Document document = Jsoup.parse(new URL(url), 30000);
        //通过J_goodsList获取所有的商品信息
        Element element = document.getElementById("J_goodsList");
        //在element里面获取所有的Li标签 每一个Li标签对应的是一个商品
        Elements elements = element.getElementsByTag("li");
        int id=0;
        //依次遍历每一个商品 并将商品信息写入数据库中
        for (Element el : elements) {
            Book book=new Book();
            id++;
            //京东的图片数量较多,所以图片的加载采取懒加载,被存储在data-lazy-img里面,而不是src中,用户可以通过打印element来查看
            String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");
            String price=el.getElementsByClass("p-price").eq(0).text();
            String name = el.getElementsByClass("p-name").eq(0).text();
            book.setId(id);
            book.setImg(img);
            book.setPrice(price);
            book.setName(name);
            bookMapper.insert(book);
        }
        System.out.println("批量插入数据成功");
    }
}

需要注意的是:由于京东需要加载的图片加多,所以京东的网站采用的是懒加载的机制加载图片,因为通过src属性无法获取到图片的地址信息,我们可以通过打印element来查看图片的真实存储地方。

9.插入结果展示

按照上面的步骤执行代码,即可以实现批量的插入数据,即可以节省大量的时间,而且可以保证数据的都是最新的数据。
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

散一世繁华,颠半世琉璃

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

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

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

打赏作者

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

抵扣说明:

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

余额充值