package org.apache.nutch.parse.html;

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

/**
 * 分析时间戳
 *
 * @author xum
 *
 */
public class PublishTimeExtract {

private static final String TIME_REGEX = "(:|>|\\s)?20[0-9]{2}(-|/|\\.|\\u5e74)\\d{1,2}(-|/|\\.|\\u6708)\\d{1,2}(\\u65e5)?.\\d{2}(:|\\u65f6)\\d{2}((:|\\u5206)\\d{2})?";
 private static Pattern pattern = Pattern.compile(TIME_REGEX);
 private static SimpleDateFormat sdf = new SimpleDateFormat(
   "yyyy-MM-dd HH:mm:ss");
 private static final String BBS_URL = "(http://bbs/\\..*|http://www\\.tianya\\.cn/[a-zA-Z]*forum/content/.*)";

/**
  * @param content
  * @param url
  * @return
  */
 public static String extractDate(String content, String url) {

Matcher m = pattern.matcher(content);
  Date now = new Date();

// BBS分析最后一个发表时间
  if (url.matches(BBS_URL)) {

String dateStr = null;

Date date = null;

while (m.find()) {

dateStr = m.group();

if (dateStr == null)
     continue;

dateStr = dateStr.trim().replaceAll(">", "");

if (dateStr.startsWith(":")) {
     dateStr = dateStr.replaceFirst(":", "");
    }

dateStr = dateStr.replaceAll("\\.|/|\\u5e74|\\u6708|\\u65e5",
      "-");
    dateStr = dateStr.replaceAll("\\u65f6|\\u5206", ":");

Date tempDate;

try {
     tempDate = sdf.parse(dateStr);

if (tempDate.after(now)) {
      continue;
     }

} catch (ParseException e) {
     continue;
    }

if (date == null) {
     date = tempDate;
    } else if (tempDate.after(date)) {
     date = tempDate;
    }
   }

if (date != null) {

return (date.getTime() + (long) 8 * 3600 * 1000) + "";
   }

} else { // 新闻网页分析第一个出现的时间

String dateStr = null;

if (m.find()) {
    dateStr = m.group();
   }

if (dateStr != null) {

dateStr = dateStr.trim().replaceAll(">", "");

if (dateStr.startsWith(":")) {
     dateStr = dateStr.replaceFirst(":", "");
    }

dateStr = dateStr.replaceAll("\\.|/|\\u5e74|\\u6708|\\u65e5",
      "-");
    dateStr = dateStr.replaceAll("\\u65f6|\\u5206", ":");

try {

return (sdf.parse(dateStr).getTime() + (long) 8 * 3600 * 1000)
       + "";

} catch (ParseException e) {
     return ((new Date()).getTime() + (long) 8 * 3600 * 1000)
       + "";
    }
   }
  }

return ((new Date()).getTime() + (long) 8 * 3600 * 1000) + "";
 }

}

转载于:https://blog.51cto.com/williamx/790610

使用正则表达式抽取新闻/BBS网页发表时间相关推荐

  1. 3d立体相册特效html网页代码_新闻类网页正文通用抽取器

    项目起源 开发这个项目,源自于我在知网发现了一篇关于自动化抽取新闻类网站正文的算法论文--<基于文本及符号密度的网页正文提取方法> 这篇论文中描述的算法看起来简洁清晰,并且符合逻辑.但由于 ...

  2. 正则表达式提取新闻发生时间

    最近在提取新闻事件的发生时间,现在只是实现了一个最简单的新闻,获取新闻报到时间和正文的时间. 方案:把正文中出现的第一个时间作为事情的发生时间,并按照统一的格式进行输出xxxx-xx-xx 某年某月某 ...

  3. 知网爬虫——爬取某个主题下的文章标题以及发表时间

    前几天帮朋友做了个知网的爬虫,爬取了"新闻传播"主题下的文章标题及发表时间:自己拖拖拉拉写了2天才写完,自己还是太弱了.个人认为这个作为一个练手的爬虫小项目还是不错的,于是写了主要 ...

  4. python和正则表达式抽取文本化的信息

    很多人的日常工作,都是要和大量的文本打交道的.例如学者需要阅读大量的文献材料,从中找到灵感.数据与论据:学生需要阅读很多教科书和论文,然后写自己的报告或者做幻灯:财经分析师,需要从大量的新闻报道中,找 ...

  5. 是否可以人为修改发表时间

    是否可以人为修改发表时间 转载于:https://blog.51cto.com/14188306/2346747

  6. python使用正则表达式抽取字符串中最大数值数字

    python使用正则表达式抽取字符串中最大数值数字 #python使用正则表达式抽取字符串中最大数值数字 # Function to extract maximum numeric value fro ...

  7. python使用正则表达式抽取文件中的IP地址

    python使用正则表达式抽取文件中的IP地址 IP正则 r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' 有效IP ((25[0-5]|2[0-4][0-9]|[01] ...

  8. TimeSpan 用法 求离最近发表时间的函数

    求离最近发表时间的函数 public string DateStringFromNow(DateTime dt)     {     TimeSpan span = DateTime.Now - dt ...

  9. PHP控制网页过期时间的代码!

    有时我们需要控制主页之类的网页过期时间. 但我们比如使用的是Chinacache的CDN,那要怎么样设计才能让他缓存我的内容. 当然,前提要先打开CDN中一个功能reload_into_ims on. ...

最新文章

  1. SpringBoot实现通用的接口参数校验
  2. 嵌入式学习笔记--网络打流补充笔记(iperf3应用)
  3. DAG的最小路径覆盖和二分图的最大匹配
  4. 牛客 - 云(扫描线)
  5. 项目管理:软件工程相关知识笔记
  6. java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧
  7. 链表快速排序python_Python一行代码实现快速排序的方法
  8. 玩转oracle 11g(43):oracle导出空表
  9. 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多
  10. Codecov后门事件验证分析
  11. http get post java_Java发送http的get、post请求 - 穿梭于偶然
  12. [转] 解决windows下eclipse中android项目关联android library project失败问题
  13. Fedora9虚拟机下与windows共享文件
  14. word文件退出只读模式
  15. 一、初学计算机——认识键盘布局及快捷键使用
  16. Httpwatch中http状态码列表
  17. 零基础学大数据难吗?
  18. 讨伐Zookeeper
  19. 12、Pytest之@pytest.mark.自定义标签使用
  20. Stream流式计算

热门文章

  1. 用IE重起计算机或者关机
  2. 在ASP.NET中操作文件的例子
  3. 经典网络VGGNet介绍
  4. Ubuntu14.04 LTS中升级gcc/g++版本到4.9.4的操作步骤
  5. 【python】使用python脚本将CelebA中图片按照 list_attr_celeba.txt 中属性处理(删除、复制、移动)
  6. python脚本 数据库压力测试_python-网站压力测试脚本
  7. 广告点击率预测_精品案例|在线广告点击率预测
  8. js 多个定时器_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(二)
  9. spring 数组中随机取几个_别给孩子取这三种名字!截止年末,名字中的这几个字已经烂大街了...
  10. python 空dataframe_python 创建一个空dataframe 然后添加行数据的实例