简单解决日期格式问题

最近在写一个爬虫项目,需要获取很多新闻的发布日期。

但是很多新闻网站的发布时间,不会直接写“xx月xx日xx时xx分”,而是写“xx日前”,“xx分钟前”,“xx秒前”。而我需要获取到完整的日期时间。

于是写了一个小型方法,用于产生标准格式日期。 

原理就是使用deteutil库,和当前时间进行时间减法运算,用正则匹配数字。

注意:如果import dateutil的时候失败,请尝试import python-dateutil

"""
将格式为 xxx日前、xx小时前、xx分钟前
改为标准的 2023-05-17 15:00:00 这样的格式
传入任意包含(xx日前,xx小时前,xx分前)的字符串,返回标准格式字符串
"""

import datetime
import re
from dateutil.relativedelta import relativedelta


def change_datetime(time_str, day='', minute='', hour=''):

    # 该语言的日、时、分称呼
    day = day
    minute = minute
    hour = hour

    number = re.search('([0-9]+)', time_str).group()
    if number == '' or not number:
        raise Exception('该字符串中没有表示时间的数字!')
    number = int(number)

    now_time = datetime.datetime.now()
    now_time_str = str(now_time)[:-7]

    timeArray = datetime.datetime.strptime(now_time_str, "%Y-%m-%d %H:%M:%S")

    if minute != '' and minute in time_str:
        timeArray = timeArray - relativedelta(minutes=number)
    elif hour != '' and hour in time_str:
        timeArray = timeArray - relativedelta(hours=number)
    elif day != '' and day in time_str:
        timeArray = timeArray - relativedelta(days=number)
    else:
        raise Exception('转换失败,可能是该语言的日、时、分填错/未填,或编码问题和依赖问题。')

    return str(timeArray)


if __name__ == '__main__':
    ti = 'Đầu Tư - 2 giờ trước'
    ti2 = 'VietnamNet - 57 phút trước'

    res = change_datetime(ti, hour='giờ', minute='phút')
    print(res)

因为需要爬取各个国家的网站,语言不同,所以别的语种也要考虑到。

你可能感兴趣的:(python,网络爬虫)