zoukankan      html  css  js  c++  java
  • 数据清洗之微博时间清洗

    数据清洗之微博时间清洗

    爬取微博的时候时间格式比较乱,存到数据库要统一成datatime类型,所以需要用到对时间的转换
    这里是对time模块和datetime的模块的使用。

    对于当天的有三种:

    40秒前
    50分钟前
    今天 08:12

    针对这三种,第一步要做的是获取当前的年月日

    import datetime
    now = datetime.datetime.now()
    ymd = now.strftime("%Y-%m-%d")
    #或者
    #datetime.day,datetime.month,datetime.year 分别表示一个datetime对象的日,月,年
    

    解释

    第一行我们导入datetime模块 第二行获取当前的时间,datetime类型: ``` 2018-07-20 09:28:19.080791 ``` 包含年月日和时分秒 第三行,strftime函数是格式化字符里面的参数是一个输出的字符串格式: 比如这里 的%Y代表四个数字表示的年份(%y是二位的),%m是表示月份,%d返回的是当前时间是当前月的第几天,其他的格式看下面的图有详细的解释。 ![](https://images2018.cnblogs.com/blog/736399/201807/736399-20180720110353893-108208662.jpg)

    接上我们分析第一个,
    40秒前

    第一步:获取当前的时间
    上面已经获取now了。
    第二步:减去40s
    时间上的加减我们使用datetime的timedalte属性,
    timedalte 是datetime中的一个对象,该对象表示两个时间的差值。
    timedalte 的构造函数如下:

     def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,
                     milliseconds: float = ..., minutes: float = ..., hours: float = ...,
                     weeks: float = ...) -> None: ...
    

    于是就有了下面的结果

    newdate = now - datetime.timedelta(minutes=int(seconds[:-2]))
    

    同理

    50分钟前

    newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))
    

    然后说最后另一种:
    今天 08:12
    第一步:补齐年月日
    第二步:使用time模块的strptime() 函数根据指定的格式把一个时间字符串解析为时间元组,

    语法

    strptime()方法语法:

    time.strptime(string[, format])

    参数

    string -- 时间字符串。
    format -- 格式化字符串。

    返回值

    返回struct_time对象。

    日期格式化符号:

    %y 两位数的年份表示(00-99)
    %Y 四位数的年份表示(000-9999)
    %m 月份(01-12)
    %d 月内中的一天(0-31)
    %H 24小时制小时数(0-23)
    %I 12小时制小时数(01-12)
    %M 分钟数(00=59)
    %S 秒(00-59)
    %a 本地简化星期名称
    %A 本地完整星期名称
    %b 本地简化的月份名称
    %B 本地完整的月份名称
    %c 本地相应的日期表示和时间表示
    %j 年内的一天(001-366)
    %p 本地A.M.或P.M.的等价符
    %U 一年中的星期数(00-53)星期天为星期的开始
    %w 星期(0-6),星期天为星期的开始
    %W 一年中的星期数(00-53)星期一为星期的开始
    %x 本地相应的日期表示
    %X 本地相应的时间表示
    %Z 当前时区的名称
    %% %号本身
    

    第三步:time.mktime转换成时间戳
    第四步:使用datetime的fromtimestamp模块,把时间戳转换为

    mdate = time.mktime(time.strptime(ymd + newstr, '%Y-%m-%d今天 %H:%M'))
    newdate = datetime.datetime.fromtimestamp(mdate)
    

    其他的处理思路就一样了,下面代码给出目前遇到的格式:

        def get_format_datetime(self,datestr):
    
            now = datetime.datetime.now()
            ymd = now.strftime("%Y-%m-%d")
            y = now.strftime("%Y")
            newstr = datestr
            newdate = now
            if u"楼" in datestr:
                newstr = datestr.split(u"楼")[-1].strip()
            if (u"今天" in newstr):
    
                mdate = time.mktime(time.strptime(ymd + newstr, '%Y-%m-%d今天 %H:%M'))
                newdate = datetime.datetime.fromtimestamp(mdate)
            elif (u"月" in newstr):
                mdate = time.mktime(time.strptime(y + newstr, '%Y%m月%d日 %H:%M'))
                newdate = datetime.datetime.fromtimestamp(mdate)
            elif (u"分钟前" in newstr):
                newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))
            elif (u"秒前" in newstr):
                newdate = now - datetime.timedelta(minutes=int(newstr[:-2]))
            #以下为手机端
            elif "-" in newstr:
                mdate = time.mktime(time.strptime(y+"-"+ newstr, '%Y-%m-%d'))
                newdate = datetime.datetime.fromtimestamp(mdate)
            elif (u"昨天" in newstr):
                mdate = time.mktime(time.strptime(ymd + newstr, '%Y-%m-%d昨天 %H:%M'))
                newdate = datetime.datetime.fromtimestamp(mdate)-datetime.timedelta(days=1)
            elif (u"小时前" in newstr):
                newdate = now - datetime.timedelta(hours=int(newstr[:-3]))
            else:
                newdate = datetime.datetime.strptime(newstr, "%Y-%m-%d %H:%M")
            return newdate
    
  • 相关阅读:
    SQL Server 中WITH (NOLOCK)浅析
    C#中Monitor对象与Lock关键字的区别分析
    lock,Monitor,Mutex的区别
    如何在windows7中使用“专用字符编辑器”中的字
    ppapi,npapi
    配置OpenLDAP,Java操作LDAP,DBC-LDAP进访问
    List of Mozilla-Based Applications
    TLS协议分析
    编译Chrome详细步骤
    黑客惯用软件
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9340323.html
Copyright © 2011-2022 走看看