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
- 正则表达式编写
- 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