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日

相关文章

  • jsp文件绝对路径的设置方法

    设置jsp文件的绝对路径方法可以通过配置web.xml文件来实现。以下是具体的步骤: 在web.xml文件中添加servlet和servlet-mapping标签。 <servlet> <servlet-name>yourServletName</servlet-name> <jsp-file>/WEB-INF…

    Java 2023年6月15日
    00
  • jsp自定义标签之ifelse与遍历自定义标签示例

    jsp自定义标签之ifelse与遍历自定义标签示例完整攻略 什么是自定义标签? 自定义标签是一种高级的JSP技术,它可以让JSP页面的开发人员编写出自己的标签,使得标签在JSP页面中的使用更加方便。 自定义标签分类 JSP自定义标签有两种类型:标签库模式(Tag Library)和JavaBean模式(JavaBean)。标签库包括EL函数和标签处理程序两种…

    Java 2023年6月15日
    00
  • Spring框架读取property属性文件常用5种方法

    非常感谢你对Spring框架的关注。Spring框架支持多种读取属性文件的方式,其中最常用的五种方法有以下: 方法1:通过@Value注解获取property文件中的属性值 在Spring框架中,可以通过@Value注解快速获取配置文件中的属性和环境变量的值。首先要在Spring配置文件中进行配置,在标签中添加如下配置: <context:proper…

    Java 2023年5月31日
    00
  • IDEA将Maven项目中指定文件夹下的xml等文件编译进classes的方法

    Sure,以下是如何使用IDEA将Maven项目中指定文件夹下的xml等文件编译进classes的完整攻略。 1. 在pom.xml文件中添加构建配置 在Maven项目的pom.xml文件中添加构建配置,指定要编译到classes目录下的文件夹路径,例如: <build> <resources> <resource> &l…

    Java 2023年5月26日
    00
  • java agent 使用及实现代码

    Java Agent 是一个在 Java 虚拟机启动时就注入的 Java 类,可以对 JVM 接口及类库进行访问和修改,常用作 JVM 监控,代码植入等动态工具的实现。以下是 Java Agent 的使用及实现代码攻略。 简介 Java Agent 是 JVM 提供的一种扩展机制,可以在程序运行时动态地增强、修改、监控程序的功能。Java Agent 简单来…

    Java 2023年5月20日
    00
  • Java中HashMap与String字符串互转的问题解决

    Java中HashMap与String字符串互转的问题解决 在Java开发中,我们经常会使用到HashMap来做键值对的操作。有时候我们需要把HashMap转换成字符串,或者把字符串转换成HashMap。那么,如何进行这样的操作呢?下面是两种方式来解决问题。 使用Java中自带的方法进行转换 Java中提供了很多可以直接转换的方法,我们可以使用这些方法来进行…

    Java 2023年5月27日
    00
  • 使用Java实现串口通信

    使用Java实现串口通信攻略 确定串口 在Java中,可以使用javax.comm库实现串口通信。首先需确认本机所连接的串口设备名称,以便后续步骤中选择正确的串口。 可以通过以下步骤确定串口:1. 打开“设备管理器”(Windows系统中)2. 展开“端口(COM和LPT)”,查看当前连接的串口设备的名称。 导入javax.comm库 在Java中使用jav…

    Java 2023年5月18日
    00
  • 使用Appcan客户端自动更新PHP版本号(全)

    使用 Appcan 客户端自动更新 PHP 版本号需要完成以下几个步骤: 1. 准备工作 1.1. 安装 Appcan 客户端 首先需要在本地安装好 Appcan 客户端,并进行登录操作。如果您已经完成了 Appcan 客户端的安装和登录,则可以直接进入下一个步骤。 1.2. 安装并配置 PHP 在使用 Appcan 客户端自动更新 PHP 版本号之前,需要…

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