Java精确抽取网页发布时间

针对Java精确抽取网页发布时间,下面是完整的攻略,包含以下几个步骤:

1. 获取HTML网页源代码

使用HttpClient或Jsoup等网络库,向目标网页发送请求,获取返回的HTML文本内容。

示例1-使用HttpClient获取HTML网页源代码:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HtmlSourceExtractor {

    public static String getHtml(String url) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        String htmlContent;
        try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
            HttpEntity entity = response.getEntity();
            htmlContent = EntityUtils.toString(entity, "UTF-8");
        }
        return htmlContent;
    }
}

示例2-使用Jsoup获取HTML网页源代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class HtmlSourceExtractor {

    public static String getHtml(String url) throws Exception {
        Document doc = Jsoup.connect(url).get();
        String htmlContent = doc.html();
        return htmlContent;
    }
}

2. 利用正则表达式匹配网页发布时间

在获取到HTML文本内容后,选择合适的正则表达式,匹配出发布时间信息。常用的时间格式包括:yyyy-MM-dd HH:mm:ss, yyyy/MM/dd HH:mm:ss, yyyy年MM月dd日 HH:mm:ss等。

示例1-通过正则表达式抽取京东商品发布时间:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TimeExtractor {

    private static final String JD_TIME_REGEX = "itemprop=\"datePublished\" content=\"(.*?)\"";

    public static String extractTimeFromJdHtml(String htmlContent) {
        Pattern pattern = Pattern.compile(JD_TIME_REGEX);
        Matcher matcher = pattern.matcher(htmlContent);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }
}

示例2-通过正则表达式抽取知乎问题发布时间:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TimeExtractor {

    private static final String ZHIHU_TIME_REGEX = "<span class=\"MetaItem\">\n"
            + "\\s*(.+?)\n"
            + "\\s*</span>";

    public static String extractTimeFromZhihuHtml(String htmlContent) {
        Pattern pattern = Pattern.compile(ZHIHU_TIME_REGEX, Pattern.DOTALL);
        Matcher matcher = pattern.matcher(htmlContent);
        if (matcher.find()) {
            String timeStr = matcher.group(1);
            return timeStr.replaceAll("\\s+年\\s+", "-")
                    .replaceAll("\\s+月\\s+", "-")
                    .replaceAll("\\s+日\\s+", " ")
                    .replaceAll("上午|下午", "");
        }
        return null;
    }
}

3. 转换时间格式为标准格式

将匹配到的时间字符串转换为标准的日期时间格式,例如用Java的SimpleDateFormat类进行格式化。

示例1-将京东商品发布时间转换为标准日期时间格式:

import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeFormatConverter {

    private static final String JD_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static Date convertJdTimeToStandardFormat(String jdTimeStr) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat(JD_TIME_PATTERN);
        return sdf.parse(jdTimeStr);
    }
}

示例2-将知乎问题发布时间转换为标准日期时间格式:

import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeFormatConverter {

    private static final String ZHIHU_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static Date convertZhihuTimeToStandardFormat(String zhihuTimeStr) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat(ZHIHU_TIME_PATTERN);
        return sdf.parse(zhihuTimeStr);
    }
}

4. 完整代码

综上所述,完整的Java代码如下所示:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class TimeExtractor {

    public static void main(String[] args) throws Exception {
        String jdUrl = "https://item.jd.com/100011288958.html";
        String jdHtmlContent = HtmlSourceExtractor.getHtml(jdUrl);
        String jdTimeStr = extractTimeFromJdHtml(jdHtmlContent);
        System.out.println("[京东] 发布时间为:" + jdTimeStr);
        Date jdTime = convertJdTimeToStandardFormat(jdTimeStr);
        System.out.println("[京东] 转换后时间为:" + jdTime);

        String zhihuUrl = "https://www.zhihu.com/question/471734788/answer/2009389214";
        String zhihuHtmlContent = HtmlSourceExtractor.getHtml(zhihuUrl);
        String zhihuTimeStr = extractTimeFromZhihuHtml(zhihuHtmlContent);
        System.out.println("[知乎] 发布时间为:" + zhihuTimeStr);
        Date zhihuTime = convertZhihuTimeToStandardFormat(zhihuTimeStr);
        System.out.println("[知乎] 转换后时间为:" + zhihuTime);
    }

    public static String extractTimeFromJdHtml(String htmlContent) {
        String jdTimeRegex = "itemprop=\"datePublished\" content=\"(.*?)\"";
        Pattern pattern = Pattern.compile(jdTimeRegex);
        Matcher matcher = pattern.matcher(htmlContent);
        if (matcher.find()) {
            return matcher.group(1);
        }
        return null;
    }

    public static String extractTimeFromZhihuHtml(String htmlContent) {
        String zhihuTimeRegex = "<span class=\"MetaItem\">\n"
                + "\\s*(.+?)\n"
                + "\\s*</span>";
        Pattern pattern = Pattern.compile(zhihuTimeRegex, Pattern.DOTALL);
        Matcher matcher = pattern.matcher(htmlContent);
        if (matcher.find()) {
            String timeStr = matcher.group(1);
            return timeStr.replaceAll("\\s+年\\s+", "-")
                    .replaceAll("\\s+月\\s+", "-")
                    .replaceAll("\\s+日\\s+", " ")
                    .replaceAll("上午|下午", "");
        }
        return null;
    }

    public static Date convertJdTimeToStandardFormat(String jdTimeStr) throws Exception {
        if (StringUtils.isBlank(jdTimeStr)) {
            return null;
        }
        String jdTimePattern = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(jdTimePattern);
        return sdf.parse(jdTimeStr);
    }

    public static Date convertZhihuTimeToStandardFormat(String zhihuTimeStr) throws Exception {
        if (StringUtils.isBlank(zhihuTimeStr)) {
            return null;
        }
        String zhihuTimePattern = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(zhihuTimePattern);
        return sdf.parse(zhihuTimeStr);
    }

    public static String getHtml(String url) throws Exception {
        Document doc = Jsoup.connect(url).get();
        return doc.html();
    }
}

以上就是Java精确抽取网页发布时间的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java精确抽取网页发布时间 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java == 引发的线上异常详解

    让我来详细讲解一下“java == 引发的线上异常详解”。 概述 在Java开发中,我们通常会使用“==”来比较两个对象是否相等。但是,如果使用不当,就可能会引发线上异常。本文将会详细探讨在Java中使用“==”可能会遇到的问题,以及如何避免这些问题。 引发异常的问题 基本类型与包装类比较 在Java中,基本类型和其对应的包装类是不同的类型,它们互相之间并不…

    Java 2023年5月27日
    00
  • Java抛出异常与自定义异常类应用示例

    Java中的异常处理是必不可少的,它可以让我们的代码更加健壮,提高程序的容错性。Java抛出的异常有两种,一种是系统自带的异常,如IOException、NullPointerException等,另一种是自定义异常,可以根据业务需要自行定义。 本篇攻略将详细讲解Java抛出异常与自定义异常类的应用示例,希望能够对大家有所帮助。 Java抛出异常示例 Jav…

    Java 2023年5月27日
    00
  • 直接内存的作用是什么?

    直接内存是一种在Java中使用NIO(New Input/Output)时可以使用的内存区域。与Java堆内存不同,直接内存不受Java堆大小的限制,可以使用操作系统的内存,因此可以提高I/O操作的效率。在Java中,可以使用ByteBuffer类来操作直接内存。 以下是直接内存的完整使用攻略: 分配直接内存 在Java中,可以使用ByteBuffer类的a…

    Java 2023年5月12日
    00
  • Java实现PDF打印的解决方案

    Java实现PDF打印的解决方案 前言 PDF是一种非常流行的文件格式,同时,打印也是我们常用的功能之一。在Java开发中,有时候需要实现PDF打印功能,本文将详细讲解Java实现PDF打印的解决方案。 解决方案 Java提供了多种实现PDF打印功能的方案,下面我们将进行逐一讲解。 方案一:使用iText库 iText是一个非常流行的Java PDF库,它提…

    Java 2023年5月19日
    00
  • java创建一个类实现读取一个文件中的每一行显示出来

    下面是详细的攻略: 创建一个Java类 首先,要在Java中创建一个类来实现读取文件中每一行并显示出来。在这个类中,我们需要使用Java的文件读取API以及循环来逐行读取文件中的内容并将其显示出来。 public class FileReadExample { public static void main(String[] args) { try { //…

    Java 2023年5月19日
    00
  • Java NIO通信基础示例详解

    下面是“Java NIO通信基础示例详解”的完整攻略。 概述 Java NIO是Java 1.4版本引入的一种新的I/O处理方式。相较于传统的I/O方式,NIO采用了非阻塞式I/O模型,使得I/O的效率更高。本文将详细讲解Java NIO通信的基础知识和实现方式。 NIO简介 NIO是New IO的缩写,它是用来替代传统的Java IO的。Java IO(流…

    Java 2023年5月26日
    00
  • struts2中实现多个文件同时上传代码

    当在Struts2中需要同时上传多个文件时,需要进行以下几个步骤: 1.在JSP中设置表单属性 enctype=multipart/form-data,以便能够上传文件。 <form action="upload.action" method="post" enctype="multipart/form…

    Java 2023年5月20日
    00
  • golang实现微信小程序商城后台系统(moshopserver)

    golang实现微信小程序商城后台系统(moshopserver)攻略 1. 介绍 golang实现微信小程序商城后台系统(moshopserver)是一个典型的企业级应用,其涉及了多种技术和框架的使用。其中,moshopserver使用golang语言开发,基于beego框架和MySQL数据库。本文将详细讲解moshopserver的实现流程与步骤。 2.…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部