美文网首页
Datawhale | python基础第4期 day5

Datawhale | python基础第4期 day5

作者: Spareribs | 来源:发表于2019-01-30 19:08 被阅读63次

    作业内容

    【作业构想】

    • 请用户输入一个时间,输出选项所对应的现在时间,告诉用户这两个时间相隔的天数,小时数,分钟数和秒数。
    • 请用户输入电话及邮箱,判断用户输入是否合法。
    • http://www.baidu.com 进行请求,并用正则化匹配图片内容。将百度图标爬取下来保存至本地

    实现代码

    • 正则表达式编写
    • 日期比较,输出对应的格式
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    # tag1:请用户输入一个时间,输出选项所对应的现在时间,告诉用户这两个时间相隔的天数,小时数,分钟数和秒数。
    # 参考文章:https://blog.csdn.net/Love_Legain/article/details/53617783
    # 参考文章:http://www.wklken.me/posts/2015/03/03/python-base-datetime.html
    import re
    import datetime
    
    while True:
        # 判断正确的日期输入 emmmm~~~ 这个正则太恶心了,直接Google了,参考链接在上面
        reg_date = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})" \
                   "-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))" \
                   "|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]" \
                   "|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"
    
        _date = raw_input("请您输入一个时间(格式: 1992-01-18 23:48:59):")
        # 优先匹配日期是否正确
        match_date = re.match(reg_date, _date, re.M)
        if match_date:
            match_date = str(match_date.group())
            # 将输入时间转换成 datetime.datetime() 类型
            input_date = datetime.datetime.strptime(match_date, "%Y-%m-%d %H:%M:%S")
            # 获取当前的时间
            now = datetime.datetime.now()
            if str(input_date) > str(now):
                _diff = input_date - now
            else:
                _diff = now - input_date
            _days = (_diff).days  # 获取时间差的天数
            _second = (_diff).seconds  # 获取时间差中的秒数(只是时间差中的小时、分钟和秒部分的和,并没有包含时间差的天数)
            # _total_seconds = (_diff).total_seconds()  # 获取准确的时间差,并将时间差转换为秒
            _hours = _second // (60 * 60)
            _minutes = (_second - _hours * 60 * 60) // 60
            _seconds = _second - _hours * 60 * 60 - _minutes * 60
    
            print("[Info]: 输入时间 {0} 与 当前时间 {1} 相差: {2}天 {3}小时 {4}分钟 {5}秒".format(
                input_date, now.strftime("%Y-%m-%d %H:%M:%S"), _days, _hours, _minutes, _seconds))
            break
        else:
            print("[Error]: {0} 日期输入错误,请重新输入!!!".format(_date))
    
    • 正则表达式编写
    # tag2: 请用户输入电话及邮箱,判断用户输入是否合法。
    import re
    
    reg_mail = "^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"  # Email地址
    reg_phone = "0?(13|14|15|17|18|19)[0-9]{9}"
    while True:
        _mail = raw_input("请您输入邮箱:(格式: 17726402640@qq.com):")
        _phone = raw_input("请您输入手机号码:(格式: 18826402640):")
        match_mail = re.match(reg_mail, _mail, re.M)
        match_phone = re.match(reg_phone, _phone, re.M)
        if not match_mail:
            print("您输入的邮箱不正确")
        elif not match_phone:
            print("您输入的手机号码不正确")
        else:
            break
    
    • 正则表达式编写
    • requests使用
    • 保存图片的方法 代码是Python2.7
    # tag3: 对http://www.baidu.com 进行请求,并用正则化匹配图片内容。将百度图标爬取下来保存至本地
    import re
    import os
    import urllib
    
    import requests
    
    url = "https://www.baidu.com/"
    headers = {
        'user-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
                      "(KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
        'cookie': "BAIDUID=827E342A20768F0004E6DC76FF016A09:FG=1; BIDUPSID=827E342A20768F0004E6DC76FF016A09; "
                  "PSTM=1525848041; delPer=0; pgv_pvi=5437453312; locale=zh; BD_UPN=12314753; MCITY=-257%3A; "
                  "ZD_ENTRY=google; delPer=0; BD_HOME=0; H_PS_PSSID=26524_1425_21097_28328_28415_20719",
    }
    
    response = requests.request("GET", url, headers=headers)
    url_list = re.findall(r'src="//(.+?.(?:bmp|jpg|png|gif))"?', response.text)
    file_path = 'baidu\img'
    for img_url in set(url_list):
        print(img_url)
        # 下载图片保存到本地,参考 https://www.jianshu.com/p/938763947de3
        try:
            if not os.path.exists(file_path):
                print '文件夹', file_path, '不存在,重新建立'
                # os.mkdir(file_path)
                os.makedirs(file_path)
            # 获得图片名称
            file_suffix = img_url.split("/")[-1]
            # 拼接图片名(包含路径)
            filename = '{0}{1}{2}'.format(file_path, os.sep, file_suffix)
            # print(filename)
            # 下载图片,并保存到文件夹中
            img_url = "http://{0}".format(img_url)
            urllib.urlretrieve(img_url, filename=filename)
        except IOError as e:
            print '文件操作失败', e
        except Exception as e:
            print '错误 :', e
    
    

    相关文章

      网友评论

          本文标题:Datawhale | python基础第4期 day5

          本文链接:https://www.haomeiwen.com/subject/acgcsqtx.html