小程序扫描二维码获取网址,通过Jsoup进行解析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

文章目录

前言

一、Jsoup是什么?

二、使用步骤

1.引入库

2.读入数据

总结


前言

vx开发小程序使用扫一扫时不同二维码展示的东西不一样,需要进行解析


提示:以下是本篇文章正文内容,下面案例可供参考

一、Jsoup是什么?

Jsoup是一款用于解析和操作HTML文档的Java库。它提供了一组简单且强大的API,使得在Java中处理HTML文档变得非常容易。

使用Jsoup,您可以执行以下操作:

  1. 解析HTML文档:使用Jsoup.parse()方法可以将HTML文档解析成一个Document对象,方便后续的操作。
复制代码
   String html = "<html><body><h1>Hello, Jsoup!</h1></body></html>";
   Document doc = Jsoup.parse(html);
  1. 选择器操作:Jsoup支持类似于CSS选择器的语法,可以通过选择器来选取具体的HTML元素。
复制代码
   Elements elements = doc.select("h1"); // 选择所有<h1>元素
   Element element = doc.selectFirst("h1"); // 选择第一个<h1>元素
  1. 获取元素内容:可以通过Element对象获取元素的文本内容、属性值等。
复制代码
   String text = element.text(); // 获取元素的文本内容
   String attrValue = element.attr("src"); // 获取元素的属性值
  1. 遍历元素:可以使用循环遍历Elements对象中的多个元素。
复制代码
   for (Element element : elements) {
     // 处理每个元素
   }
  1. 修改元素:可以通过Element对象修改元素的文本内容、属性值等。
复制代码
    element.text("New Text"); // 修改元素的文本内容
    element.attr("src", "new_image.jpg"); // 修改元素的属性值

以上只是Jsoup的一些基本用法示例,Jsoup还提供了更多功能,如处理表单、处理URL、处理CSS样式等。您可以参考Jsoup的官方文档或其他教程来学习更多关于Jsoup的用法和功能。

二、使用步骤

1.引入库

代码如下(示例):

复制代码
<!--爬取页面-->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.2</version>
</dependency>

2.读入数据

代码如下(示例):

c 复制代码
 public static void main(String[] args) throws IOException, InterruptedException {


        try {
            URL url = new URL("http://teshexxx");

            // 设置连接超时时间
            URLConnection connection = url.openConnection();
            connection.setConnectTimeout(5000);

            // 设置读取超时时间
            connection.setReadTimeout(5000);

            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line);
            }

            String data = parseData(content.toString());
            String gasCode = extractGasCode(data);

            System.out.println("钢瓶编码: " + data);
            System.out.println("气瓶编号: " + gasCode);
        } catch (SocketTimeoutException e) {
            System.out.println("连接超时,请检查网络连接或增加超时时间");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String parseData(String content) {
        return content;
    }

    public static String extractGasCode(String htmlContent) throws InterruptedException {
        int maxRetries = 3;
        int retryCount = 0;
        String gasCode = null;

        while (retryCount < maxRetries) {
            Document doc = Jsoup.parse(htmlContent);
            Elements spans = doc.select("span");
            if (spans.isEmpty()) {
                Elements trs = doc.select("tr");
                for (Element tr : trs) {
                    Elements tds = tr.select("td");
                    for (int i = 0; i < tds.size() - 1; i++) {
                        Element td = tds.get(i);
                        if (td.text().equals("气瓶编号")) {
                            gasCode = tds.get(i + 1).text();
                            break;
                        }
                    }
                    if (gasCode != null) {
                        break;
                    }
                }
            } else {
                for (Element span : spans) {
                    if (span.text().equals("气瓶编号")) {
                        gasCode = span.nextElementSibling().text();
                        break;
                    }
                }
            }
            break;
        }

        return gasCode;
    }以上是可以直接在jvav代码中能获取到数据的可以使用;
下面这种则需要对url发起请求方能获取数据
 try {
            // 创建URL对象
            URL url = new URL("http://mai.xxxx");
            // 打开连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置请求方法为POST
            conn.setRequestMethod("POST");
            // 启用输入输出
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // 设置请求头
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // 构建请求参数
            String params = "code=ASZNL2&tenant=dlh";
            // 发送请求参数
            byte[] postData = params.getBytes(StandardCharsets.UTF_8);
            conn.setRequestProperty("Content-Length", String.valueOf(postData.length));
            try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
                wr.write(postData);
            }
            // 获取响应代码
//            int responseCode = conn.getResponseCode();
//            System.out.println("Response Code: " + responseCode);
            // 读取响应内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            // 将StringBuilder对象转换为字符串类型
            String jsonString = response.toString();
            // 解析JSON
            JSONObject jsonObject = new JSONObject(jsonString);
            // 获取data字段的值
            JSONObject data = jsonObject.getJSONObject("data");
            // 获取gpbm字段的值
            String gpbm = data.getString("gpbm");
            System.out.println("gpbm: " + gpbm);
            // 关闭连接
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }

该处使用的url网络请求的数据。


总结

以上就是我根据查阅资料和实际情况结合总结出来,希望对其他人有所帮助


相关推荐
编程大师哥3 分钟前
vxe-table 透视表分组汇总及排序基础配置
java
8***848217 分钟前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
9***J62820 分钟前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
M***Z21031 分钟前
SQL 建表语句详解
java·数据库·sql
v***79431 分钟前
Spring Boot 热部署
java·spring boot·后端
执笔论英雄31 分钟前
【RL】python协程
java·网络·人工智能·python·设计模式
galaxyffang43 分钟前
认证、会话管理、授权的区别
java
未名编程1 小时前
Windows 下如何部署 Nacos 并导入配置文件
java·windows
boonya1 小时前
Java中Plugin设计模式的规范应用
java·spring·设计模式·插件模式
杰克尼1 小时前
3. 分巧克力
java·数据结构·算法