Datawhale | python基础第4期 day5

2019-01-30  本文已影响63人  Spareribs

作业内容

【作业构想】

  • 请用户输入一个时间,输出选项所对应的现在时间,告诉用户这两个时间相隔的天数,小时数,分钟数和秒数。
  • 请用户输入电话及邮箱,判断用户输入是否合法。
  • 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
# 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

上一篇下一篇

猜你喜欢

热点阅读