我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java怎么解析html中的内容并存到数据库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java怎么解析html中的内容并存到数据库

这篇文章主要讲解了“Java怎么解析html中的内容并存到数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么解析html中的内容并存到数据库”吧!

准备工作

我选用的是使用jsoup进行html的读取和解析,需要加入如下依赖:

        <dependency>            <groupId>org.jsoup</groupId>            <artifactId>jsoup</artifactId>            <version>1.8.3</version>        </dependency>

jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jquery的操作方法来取出和操作数据。它是基于MIT协议发布的。

jsoup的主要功能如下:

        1、从一个URL,文件或字符串中解析HTML;

        2、使用DOM或CSS选择器来查找、取出数据;

        3、可操作HTML元素、属性、文本; 

示例代码:

//获取html的文档对象Document doc = Jsoup.parse("http://www.dangdang.com");//获取页面下id="content"的标签Element content = doc.getElementById("content");//获取页面下的a标签Elements links = content.getElementsByTag("a");for (Element link : links) {    //获取a标签下的href的属性值    String linkHref = link.attr("href");    //获取a标签下的文本内容    String linkText = link.text();}

Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据。具体如下:

1、查找元素

        getElementById(String id)

        getElementsByTag(String tag)

        getElementsByClass(String className)

        getElementsByAttribute(String key) (and related methods)

        Element siblings: siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()

        Graph: parent(), children(), child(int index)

2、元素数据

        attr(String key)获取属性

        attr(String key, String value)设置属性

        attributes()获取所有属性

        id(), className() and classNames()

        text()获取文本内容

        text(String value) 设置文本内容

        html()获取元素内

        HTMLhtml(String value)设置元素内的HTML内容

        outerHtml()获取元素外HTML内容

        data()获取数据内容(例如:script和style标签)

        tag() and tagName()

3、操作HTML和文本

        append(String html), prepend(String html)

        appendText(String text), prependText(String text)

        appendElement(String tagName), prependElement(String tagName) html(String value)

开始爬取网站数据

直接上代码:

Test.java:

@Slf4j@SpringBootTestclass Test {     @Resource    private PositionService positionService;         @Test    public void test2() throws InterruptedException {        //一共五级        for (int i = 0 ; i < 5 ; i++) {            if (i == 0) {                List<PositionEntity> positionEntities = PositionUtils.reqPosition(PositionUtils.URL_HEAD);                savePosition(positionEntities, null, i);                continue;            }            List<Position> positions = positionService.findListByLevel(i);            for (Position parentPosition : positions) {                List<PositionEntity> positionEntities = PositionUtils.reqPosition(String.format("%s%s%s", PositionUtils.URL_HEAD, parentPosition.getSn(), PositionUtils.URL_TAIL));                savePosition(positionEntities, parentPosition, i);            }        }    }         private void savePosition(List<PositionEntity> positionEntities, Position parentPosition, int i){        for (PositionEntity entity : positionEntities) {            Position position = new Position();            position.setSn(entity.getCode());            position.setFullInitials(PinyinUtils.strFirst2Pinyin((parentPosition != null ? parentPosition.getFullName() : "")+entity.getName()));            position.setFullName((parentPosition != null ? parentPosition.getFullName() : "")+entity.getName());            position.setLevel(i + 1);            position.setName(entity.getName());            position.setOrderNumber(0);            position.setPsn(parentPosition != null ? parentPosition.getSn() : 0L);            long count = positionService.countBySn(position.getSn());            if (count == 0) {                positionService.savePosition(position);            }        }    } }

PositionService.java:

public interface PositionService {    void savePosition(Position position);     long countBySn(Long sn);    List<Position> findListByLevel(Integer level);}

PositionServiceImpl.java:

@Servicepublic class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> implements PositionService {     @Override    public void savePosition(Position position) {        baseMapper.insert(position);    }     @Override    public long countBySn(Long sn) {        return baseMapper.selectCount(new QueryWrapper<Position>().lambda().eq(Position::getSn, sn));    }     @Override    public List<Position> findListByLevel(Integer level) {        return baseMapper.selectList(new QueryWrapper<Position>().lambda().eq(Position::getLevel, level));    }}

PositionMapper.java:

@Repositorypublic interface PositionMapper extends BaseMapper<Position> { }

Position.java:

@Data@TableName("position")@EqualsAndHashCode()public class Position implements Serializable {     @TableId(type = IdType.AUTO)    private Integer id;         private Long sn;         private Long psn;         private String name;         private String shortName;         private Integer level;         private String code;         private String zip;         private String spell;         private String spellFirst;         private String fullName;         private String fullInitials;         private Integer orderNumber; }

PositionMapper.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.wkf.workrecord.dao.PositionMapper"> </mapper>

PositionUtils.java:

public class PositionUtils {     public final static String URL_HEAD = "https://xingzhengquhua.bmcx.com/";     public final static String URL_TAIL = "__xingzhengquhua/";     public static List<PositionEntity> reqPosition(String url) throws InterruptedException {        String htmlStr = HttpUtils.getRequest(url);        //解析字符串为Document对象        Document doc = Jsoup.parse(htmlStr);        //获取body元素,获取class="fc"的table元素        Elements table = doc.body().getElementsByAttributeValue("bgcolor", "#C5D5C5");        //获取tbody元素        Elements children;        children = table.first().children();        //获取tr元素集合        Elements tr = children.get(0).getElementsByTag("tr");        List<PositionEntity> result = new ArrayList<>();        //遍历tr元素,获取td元素,并打印        for (int i = 3; i < tr.size(); i++) {            Element e1 = tr.get(i);            Elements td = e1.getElementsByTag("td");            if (td.size() < 2) {                break;            }            String name = td.get(0).getElementsByTag("td").first().getElementsByTag("a").text();            String code = td.get(1).getElementsByTag("td").first().getElementsByTag("a").text();            if (CheckUtils.isEmpty(name) || CheckUtils.isEmpty(code)) {                continue;            }            result.add(new PositionEntity(name, Long.parseLong(code)));        }        //防止ip被封        Thread.sleep(10000);        return result;    } }

PinyinUtils.java:

public class PinyinUtils {private final static HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();static {format.setCaseType(HanyuPinyinCaseType.LOWERCASE);format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);format.setVCharType(HanyuPinyinVCharType.WITH_V);} public static String str2Pinyin(String str, String fill) {if (null == str) {return null;}try {StringBuilder sb = new StringBuilder();if (fill == null)fill = "";boolean isCn = true;for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (i > 0 && isCn) {sb.append(fill);}if (c == ' ') {sb.append(fill);}// 1、判断c是不是中文if (c >= '\u4e00' && c <= '\u9fa5') {isCn = true;String[] piyins = PinyinHelper.toHanyuPinyinStringArray(c, format);if (null == piyins || 0 >= piyins.length) {continue;}sb.append(piyins[0]);} else {// 不是中文if (c >= 'A' && c <= 'Z') {sb.append((char)(c + 32));} else {sb.append(c);}isCn = false;}}return sb.toString();} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return null;} public static String strFirst2Pinyin(String str) {if (null == str) {return null;}try {StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);// 1、判断c是不是中文if (c >= '\u4e00' && c <= '\u9fa5') {String[] piyins = PinyinHelper.toHanyuPinyinStringArray(c, format);if (null == piyins || 0 >= piyins.length) {continue;}sb.append(piyins[0].charAt(0));} else {// 不是中文if (c >= 'A' && c <= 'Z') {sb.append((char)(c + 32));} else {sb.append(c);}}}return sb.toString();} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return null;}}

感谢各位的阅读,以上就是“Java怎么解析html中的内容并存到数据库”的内容了,经过本文的学习后,相信大家对Java怎么解析html中的内容并存到数据库这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java怎么解析html中的内容并存到数据库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java怎么解析html中的内容并存到数据库

这篇文章主要讲解了“Java怎么解析html中的内容并存到数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么解析html中的内容并存到数据库”吧!准备工作我选用的是使用jsou
2023-07-05

html怎么读取数据库中的内容

在 html 中读取数据库中的内容涉及四步:通过 javascript 发送请求建立数据库连接。使用 onload 事件处理程序解析响应。根据数据类型解析数据,如 json.parse() 解析 json。使用 innerhtml 或 ap
html怎么读取数据库中的内容
2024-04-05

java怎么获取当前时间并存储到数据库

通过JDBC和PreparedStatement,程序可连接数据库并获取当前时间。使用LocalDateTime.now()获取时间后,用PreparedStatement创建带有参数化查询的INSERT查询。将当前时间作为参数设置,执行查询将时间存储到数据库的指定列中。代码示例展示了如何执行此操作,并强调注意事项,如数据库列类型、时区设置和资源关闭。
java怎么获取当前时间并存储到数据库
2024-04-12

Java怎么调用接口获取json数据解析后保存到数据库

本篇内容主要讲解“Java怎么调用接口获取json数据解析后保存到数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么调用接口获取json数据解析后保存到数据库”吧!Java调用接口
2023-07-05

java中yaml文件怎么存储到数据库

在Java中,可以使用YAML库(如SnakeYAML)来读取和解析YAML文件,并将其存储到数据库中。以下是一种简单的方法来实现这一功能:导入SnakeYAML库到你的项目中。你可以在Maven或Gradle中添加以下依赖项:Maven:
java中yaml文件怎么存储到数据库
2024-04-15

利用Java如何实现解析Excel文件并存入数据库中

利用Java如何实现解析Excel文件并存入数据库中?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.web.xml中的配置文件web.xml中的配置文件就按照这种方式写,
2023-05-31

idea的数据库内容无法显示怎么解决

要解决Idea数据库内容无法显示的问题,可以采取以下步骤:检查数据库连接:确保数据库连接设置正确,包括主机名、端口号、用户名和密码等。可以尝试重新配置数据库连接并测试连接是否成功。检查数据库表和字段:确保数据库中的表和字段与Idea代码中的
2023-10-25

怎么使用PHP在网页中修改数据库的内容

这篇文章主要介绍了怎么使用PHP在网页中修改数据库的内容的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用PHP在网页中修改数据库的内容文章都会有所收获,下面我们一起来看看吧。首先,需要在网页中连接数据库。
2023-07-05

Java数据库程序中的存储过程怎么使用

这篇文章主要介绍“Java数据库程序中的存储过程怎么使用”,在日常操作中,相信很多人在Java数据库程序中的存储过程怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据库程序中的存储过程怎么使用
2023-06-17

javascript当页面中的一部分或者全部的内容将被移离当前页面[剪贴]并移动到浏览者的系统剪贴板时触发此事件使用什么函数,详细讲解

JavaScript中用于在页面内容被剪切时触发的事件是copy事件。该事件可在可拷贝元素上监听,如或。copy事件对象包含剪切文本、防止剪切或停止冒泡等信息。通过监听copy事件并处理事件对象,开发者可以实现自定义剪切行为,如阻止某些内容剪切或显示剪切消息。请注意,copy事件在用户选择文本或使用键盘快捷键剪切时不会触发。
javascript当页面中的一部分或者全部的内容将被移离当前页面[剪贴]并移动到浏览者的系统剪贴板时触发此事件使用什么函数,详细讲解
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录